From d1e835ebf9cb027774cd9fef46014f2b3b0908de Mon Sep 17 00:00:00 2001 From: Steven Sklar Date: Thu, 12 Dec 2019 14:49:24 -0500 Subject: [PATCH] Merge --- .gitignore | 2 +- README.md | 3 +++ sendgrid_backend/mail.py | 24 +++++++++++++----------- setup.py | 2 +- test/test_mail.py | 36 +++++++++++++++--------------------- 5 files changed, 33 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index bffbe9e..144f21a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,5 @@ build/ .noseids .vscode/ .tox - \.eggs/ +.idea diff --git a/README.md b/README.md index 64ff34f..82f359a 100644 --- a/README.md +++ b/README.md @@ -20,3 +20,6 @@ To use the backend, simply install the package (using pip), set the `EMAIL_BACKE 1. To err on the side of caution, this defaults to True, so emails sent in DEBUG mode will not be delivered, unless this setting is explicitly set to False. 2. `SENDGRID_ECHO_TO_STDOUT` will echo to stdout or any other file-like object that is passed to the backend via the `stream` kwarg. +3. `SENDGRID_TRACK_EMAIL_OPENS` - defaults to true and tracks email open events via the Sendgrid service. These events are logged in the Statistics UI, Email Activity interface, and are reported by the Event Webhook. +4. `SENDGRID_TRACK_CLICKS_HTML` - defaults to true and, if enabled in your Sendgrid account, will tracks click events on links found in the HTML message sent. +5. `SENDGRID_TRACK_CLICKS_PLAIN` - defaults to true and, if enabled in your Sendgrid account, will tracks click events on links found in the plain text message sent. diff --git a/sendgrid_backend/mail.py b/sendgrid_backend/mail.py index 5ae9ce6..c2c6583 100644 --- a/sendgrid_backend/mail.py +++ b/sendgrid_backend/mail.py @@ -16,7 +16,7 @@ import sendgrid from sendgrid.helpers.mail import ( Attachment, Category, Content, Email, Header, Mail, MailSettings, OpenTracking, - ClickTracking, SubscriptionTracking, Personalization, SandBoxMode, Substitution, TrackingSettings, CustomArg + Personalization, SandBoxMode, Substitution, TrackingSettings, CustomArg, ClickTracking ) from python_http_client.exceptions import HTTPError @@ -67,15 +67,17 @@ def __init__(self, *args, **kwargs): track_email = settings.SENDGRID_TRACK_EMAIL_OPENS self.track_email = track_email - track_click = True - if hasattr(settings, "SENDGRID_TRACK_EMAIL_CLICKS"): - track_click = settings.SENDGRID_TRACK_EMAIL_CLICKS - self.track_click = track_click + track_clicks_html = True + if hasattr(settings, "SENDGRID_TRACK_CLICKS_HTML"): + track_clicks_html = settings.SENDGRID_TRACK_CLICKS_HTML - subscription = False - if hasattr(settings, "SENDGRID_SUBSCRIPTION_ENABLE"): - subscription = settings.SENDGRID_SUBSCRIPTION_ENABLE - self.subscription = subscription + self.track_clicks_html = track_clicks_html + + track_clicks_plain = True + if hasattr(settings, "SENDGRID_TRACK_CLICKS_PLAIN"): + track_clicks_plain = settings.SENDGRID_TRACK_CLICKS_PLAIN + + self.track_clicks_plain = track_clicks_plain if hasattr(settings, "SENDGRID_ECHO_TO_STDOUT") and settings.SENDGRID_ECHO_TO_STDOUT: self._lock = threading.RLock() @@ -300,8 +302,8 @@ def _build_sg_mail(self, msg): tracking_settings = TrackingSettings() tracking_settings.open_tracking = OpenTracking(self.track_email) - tracking_settings.click_tracking = ClickTracking(self.track_click) - tracking_settings.subscription_tracking = SubscriptionTracking(self.subscription) + tracking_settings.click_tracking = ClickTracking(self.track_clicks_html, self.track_clicks_plain) + mail.tracking_settings = tracking_settings return mail.get() diff --git a/setup.py b/setup.py index adcb6be..9df6bff 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ setup( name="django-sendgrid-v5", - version="0.8.0", + version="0.8.1", description="An implementation of Django's EmailBackend compatible with sendgrid-python v5+", long_description=long_description, url="https://github.com/sklarsa/django-sendgrid-v5", diff --git a/test/test_mail.py b/test/test_mail.py index 9914e73..de0c68e 100644 --- a/test/test_mail.py +++ b/test/test_mail.py @@ -69,10 +69,9 @@ def test_EmailMessage(self): "name": "Sam Smith" }, "subject": "Hello, World!", - "tracking_settings": { - "click_tracking": {"enable": True}, - 'open_tracking': {'enable': True}, - 'subscription_tracking': {'enable': False}}, + "tracking_settings": {"click_tracking": {"enable": True, "enable_text": True}, + "open_tracking": {"enable": True} + }, "content": [{ "type": "text/plain", "value": "Hello, World!" @@ -121,10 +120,9 @@ def test_EmailMessage_attributes(self): } }, "subject": "Hello, World!", - "tracking_settings": { - "click_tracking": {"enable": True}, - 'open_tracking': {'enable': True}, - 'subscription_tracking': {'enable': False}}, + "tracking_settings": {"click_tracking": {"enable": True, "enable_text": True}, + "open_tracking": {"enable": True} + }, "content": [{ "type": "text/plain", "value": "Hello, World!" @@ -183,10 +181,9 @@ def test_EmailMultiAlternatives(self): "name": "Sam Smith" }, "subject": "Hello, World!", - "tracking_settings": { - "click_tracking": {"enable": True}, - 'open_tracking': {'enable': True}, - 'subscription_tracking': {'enable': False}}, + "tracking_settings": {"click_tracking": {"enable": True, "enable_text": True}, + "open_tracking": {"enable": True} + }, "attachments": [{ "content": "MSwyLDMsNA==", "filename": "file.csv", @@ -262,10 +259,9 @@ def test_EmailMultiAlternatives__unicode_attachment(self): "name": "Sam Smith" }, "subject": "Hello, World!", - "tracking_settings": { - "click_tracking": {"enable": True}, - 'open_tracking': {'enable': True}, - 'subscription_tracking': {'enable': False}}, + "tracking_settings": {"click_tracking": {"enable": True, "enable_text": True}, + "open_tracking": {"enable": True} + }, "attachments": [ { "content": "0A==", @@ -428,11 +424,9 @@ def test_EmailMessage_custom_args(self): "name": "Sam Smith" }, "subject": "Hello, World!", - "tracking_settings": { - "click_tracking": {"enable": True}, - 'open_tracking': {'enable': True}, - 'subscription_tracking': {'enable': False} - }, + "tracking_settings": {"click_tracking": {"enable": True, "enable_text": True}, + "open_tracking": {"enable": True} + }, "content": [{ "type": "text/plain", "value": "Hello, World!"