emencia / emencia-django-newsletter

An app for sending newsletter by email to a contact list.
189 stars 72 forks source link

Permit to use a Gif tracking image instead of a png (and use transparent pixel) #33

Closed alexgarel closed 12 years ago

alexgarel commented 13 years ago

Here comes a patch so that one can use a gif image for tracking mail opening instead of the default png.

Png is not supported by eg. some versions of Lotus Notes.

I take the occasion to replace the white pixel png for a transparent pixel one.

alexgarel commented 13 years ago

So :

diff --git a/emencia/django/newsletter/mailer.py b/emencia/django/newsletter/mailer.py
index d38877b..2859152 100644
--- a/emencia/django/newsletter/mailer.py
+++ b/emencia/django/newsletter/mailer.py
 class Mailer(object):
@@ -199,7 +199,9 @@ class Mailer(object):
         context = Context({'contact': contact,
                            'domain': Site.objects.get_current().domain,
                            'newsletter': self.newsletter,
-                           'uidb36': uidb36, 'token': token})
+                           'uidb36': uidb36, 'token': token,
+                           'format': TRACKING_IMAGE_FORMAT})
+

         content = self.newsletter_template.render(context)
         if TRACKING_LINKS:
diff --git a/emencia/django/newsletter/settings.py b/emencia/django/newsletter/settings.py
index 4e5d653..e6c7d65 100644
--- a/emencia/django/newsletter/settings.py
+++ b/emencia/django/newsletter/settings.py
@@ -16,7 +16,13 @@ DEFAULT_HEADER_REPLY = getattr(settings, 'NEWSLETTER_DEFAULT_HEADER_REPLY', 'Eme
 DEFAULT_HEADER_SENDER = getattr(settings, 'NEWSLETTER_DEFAULT_HEADER_SENDER', 'Emencia Newsletter<noreply@emencia.com>')

 TRACKING_LINKS = getattr(settings, 'NEWSLETTER_TRACKING_LINKS', True)
-TRACKING_IMAGE = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kKEwwvINGR5lYAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQVQI12P4//8/AAX+Av7czFnnAAAAAElFTkSuQmCC'
+
+# you may use gif with 
+# 'R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='
+TRACKING_IMAGE_FORMAT = getattr(settings, 'NEWSLETTER_TRACKING_IMAGE_FORMAT',
+                                'png')
+TRACKING_IMAGE = getattr(settings, 'NEWSLETTER_TRACKING_IMAGE',
+                 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A\n/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDDwgsKd5+jrAAAAAZdEVYdENv\nbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADUlEQVQI12NgYGBgAAAABQABXvMqOgAAAABJ\nRU5ErkJggg==')

 MEDIA_URL = getattr(settings, 'NEWSLETTER_MEDIA_URL', '/edn/')

diff --git a/emencia/django/newsletter/templates/newsletter/newsletter_image_tracking.html b/emencia/django/newsletter/templates/newsletter/newsletter_image_tracking.html
index 1c0e997..4333499 100644
--- a/emencia/django/newsletter/templates/newsletter/newsletter_image_tracking.html
+++ b/emencia/django/newsletter/templates/newsletter/newsletter_image_tracking.html
@@ -1 +1 @@
-<img src="http://{{ domain }}{% url newsletter_newsletter_tracking slug=newsletter.slug,uidb36=uidb36,token=token %}" width="1" height="1" />
+<img src="http://{{ domain }}{% url newsletter_newsletter_tracking slug=newsletter.slug,uidb36=uidb36,token=token,format=format %}" width="1" height="1" />
diff --git a/emencia/django/newsletter/urls/tracking.py b/emencia/django/newsletter/urls/tracking.py
index 748720d..b66e562 100644
--- a/emencia/django/newsletter/urls/tracking.py
+++ b/emencia/django/newsletter/urls/tracking.py
@@ -3,7 +3,7 @@ from django.conf.urls.defaults import url
 from django.conf.urls.defaults import patterns

 urlpatterns = patterns('emencia.django.newsletter.views.tracking',
-                       url(r'^newsletter/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+).png$',
+                       url(r'^newsletter/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)\.(?P<format>png|gif)$',
                            'view_newsletter_tracking',
                            name='newsletter_newsletter_tracking'),
                        url(r'^link/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/(?P<link_id>\d+)/$',
diff --git a/emencia/django/newsletter/views/tracking.py b/emencia/django/newsletter/views/tracking.py
index a125176..e0cb03b 100644
--- a/emencia/django/newsletter/views/tracking.py
+++ b/emencia/django/newsletter/views/tracking.py
@@ -26,14 +26,15 @@ from emencia.django.newsletter.settings import USE_UTM_TAGS
 from emencia.django.newsletter.settings import TRACKING_IMAGE

-def view_newsletter_tracking(request, slug, uidb36, token):
+def view_newsletter_tracking(request, slug, uidb36, token, format="png"):
     """Track the opening of the newsletter by requesting a blank img"""
     newsletter = get_object_or_404(Newsletter, slug=slug)
     contact = untokenize(uidb36, token)
     ContactMailingStatus.objects.create(newsletter=newsletter,
                                         contact=contact,
                                         status=ContactMailingStatus.OPENED)
-    return HttpResponse(base64.b64decode(TRACKING_IMAGE), mimetype='image/png')
+    return HttpResponse(base64.b64decode(TRACKING_IMAGE), 
+                        mimetype='image/' + format)

 def view_newsletter_tracking_link(request, slug, uidb36, token, link_id):
Fantomas42 commented 13 years ago

Really good idea ! I will implement it as soon as possible.