In this article we will see how to track the Email opens for the emails sent from your Django App.
This will help us in accumulating the information such as:
- who opened the email
- when was email opened
- what is the open rate, i.e. how many user opened the email
- what is the time when most of the users check their emails.
You may use any of these methods to send an email.
- Sending bulk emails using mailgun api
- Sending email using office 365
- Sending email using Gmail
Create the HTML body for email:
# using template to generate the email content template = get_template("testapp/email.html") context_data = dict() # pass the variable image_url to template # image_load is the URL name. see below context_data["image_url"] = equest.build_absolute_uri(reverse("image_load")) html_text = template.render(context_data) plain_text = strip_tags(html_text)
In the email template email.html , at the end of the content, insert the below code.
<img src="{{image_url}}" height="0px" width="0px"/>
This is an image of 0 by 0 pixels, which will not be visible in email but will hit the URL image_load
on our server when email is loaded.
Create a url in urls.py
file of your app.
url(r'^image_load/$', views.image_load, name='image_load'),
Create a view image_load
in views.py
file.
from django.http import HttpResponse from PIL import Image def image_load(request): print("\nImage Loaded\n") red = Image.new('RGB', (1, 1)) response = HttpResponse(content_type="image/png") red.save(response, "PNG") return response
This view is creating and returning an image as response to url image_load
.
image_load
url.
This will NOT work on localhost. So I created a test app for free on pythonanywhere server (it took me just 5 minutes) and used the URL from there.
When I opened the test email, I could see the output printed in server logs.
When sending emails to multiple users, append the encrypted userId
or emailId
to the image source URL so that you can track who opened the email.
Try this and let us know your views.