Postmark: add track_clicks support

Closes #38
This commit is contained in:
medmunds
2016-10-23 10:54:59 -07:00
parent 60dc11559d
commit 7248c3441e
5 changed files with 28 additions and 12 deletions

View File

@@ -183,8 +183,8 @@ class PostmarkPayload(RequestsPayload):
if len(tags) > 1:
self.unsupported_feature('multiple tags (%r)' % tags)
# Postmark doesn't support click-tracking
# def set_track_clicks(self, track_clicks):
def set_track_clicks(self, track_clicks):
self.data["TrackLinks"] = 'HtmlAndText' if track_clicks else 'None'
def set_track_opens(self, track_opens):
self.data["TrackOpens"] = track_opens

View File

@@ -34,7 +34,7 @@ Email Service Provider |Mailgun| |Mandrill| |Postmark|
:attr:`~AnymailMessage.metadata` Yes Yes No Yes Yes
:attr:`~AnymailMessage.send_at` Yes Yes No Yes Yes
:attr:`~AnymailMessage.tags` Yes Yes Max 1 tag Yes Max 1 tag
:attr:`~AnymailMessage.track_clicks` Yes Yes No Yes Yes
:attr:`~AnymailMessage.track_clicks` Yes Yes Yes Yes Yes
:attr:`~AnymailMessage.track_opens` Yes Yes Yes Yes Yes
.. rubric:: :ref:`templates-and-merge`

View File

@@ -87,9 +87,7 @@ messages.)
Limitations and quirks
----------------------
Postmark has excellent support for standard email functionality, but does
not support all the tracking and reporting additions offered by some other
ESPs.
Postmark does not support a few tracking and reporting additions offered by other ESPs.
Anymail normally raises an :exc:`~anymail.exceptions.AnymailUnsupportedFeature`
error when you try to send a message using features that Postmark doesn't support
@@ -107,13 +105,22 @@ see :ref:`unsupported-features`.
Postmark does not support attaching :attr:`~anymail.message.AnymailMessage.metadata`
to messages.
**No click-tracking**
Postmark supports :attr:`~anymail.message.AnymailMessage.track_open`,
but not :attr:`~anymail.message.AnymailMessage.track_clicks`.
**No delayed sending**
Postmark does not support :attr:`~anymail.message.AnymailMessage.send_at`.
**Click-tracking**
Postmark supports `several link-tracking options`_. Anymail treats
:attr:`~anymail.message.AnymailMessage.track_clicks` as Postmark's
"HtmlAndText" option when True.
If you would prefer Postmark's "HtmlOnly" or "TextOnly" link-tracking, you could
either set that as a Postmark server-level default (and use `message.track_clicks = False`
to disable tracking for specific messages), or use something like
`message.esp_extra = {'TrackLinks': "HtmlOnly"}` to specify a particular option.
.. _several link-tracking options:
http://developer.postmarkapp.com/developer-link-tracking.html
.. _postmark-templates:

View File

@@ -325,8 +325,15 @@ class PostmarkBackendAnymailFeatureTests(PostmarkBackendMockAPITestCase):
def test_track_clicks(self):
self.message.track_clicks = True
with self.assertRaisesMessage(AnymailUnsupportedFeature, 'track_clicks'):
self.message.send()
data = self.get_api_call_json()
self.assertEqual(data['TrackLinks'], 'HtmlAndText')
# Also explicit "None" for False (to override server default)
self.message.track_clicks = False
self.message.send()
data = self.get_api_call_json()
self.assertEqual(data['TrackLinks'], 'None')
def test_template(self):
self.message.template_id = 1234567
@@ -369,6 +376,7 @@ class PostmarkBackendAnymailFeatureTests(PostmarkBackendMockAPITestCase):
self.assertNotIn('TemplateId', data)
self.assertNotIn('TemplateModel', data)
self.assertNotIn('TrackOpens', data)
self.assertNotIn('TrackLinks', data)
def test_esp_extra(self):
self.message.esp_extra = {

View File

@@ -53,6 +53,7 @@ class PostmarkBackendIntegrationTests(SimpleTestCase, AnymailTestMixin):
# no metadata, send_at, track_clicks support
tags=["tag 1"], # max one tag
track_opens=True,
track_clicks=True,
)
message.attach("attachment1.txt", "Here is some\ntext for you", "text/plain")
message.attach("attachment2.csv", "ID,Name\n1,Amy Lina", "text/csv")