Mailgun: add AMPHTML support

This commit is contained in:
medmunds
2021-01-26 18:08:39 -08:00
committed by Mike Edmunds
parent d33c9ea4ed
commit d1ef61d3ba
4 changed files with 30 additions and 0 deletions

View File

@@ -30,6 +30,12 @@ vNext
*Unreleased changes*
Features
~~~~~~~~
* **Mailgun:** Add support for AMP for Email
(via ``message.attach_alternative(..., "text/x-amp-html")``).
Fixes
~~~~~

View File

@@ -310,6 +310,14 @@ class MailgunPayload(RequestsPayload):
self.unsupported_feature("multiple html parts")
self.data["html"] = body
def add_alternative(self, content, mimetype):
if mimetype.lower() == "text/x-amp-html":
if "amp-html" in self.data:
self.unsupported_feature("multiple html parts")
self.data["amp-html"] = content
else:
super().add_alternative(content, mimetype)
def add_attachment(self, attachment):
# http://docs.python-requests.org/en/v2.4.3/user/advanced/#post-multiple-multipart-encoded-files
if attachment.inline:

View File

@@ -237,6 +237,13 @@ Limitations and quirks
Your tracking webhooks will receive metadata values (either that you provided or the
default empty string) for *every* key used with *any* recipient in the send.
**AMP for Email**
Mailgun supports sending AMPHTML email content. To include it, use
``message.attach_alternative("...AMPHTML content...", "text/x-amp-html")``
(and be sure to also include regular HTML and/or text bodies, too).
.. versionadded:: 8.2
.. _undocumented API requirement:
https://mailgun.uservoice.com/forums/156243-feature-requests/suggestions/35668606

View File

@@ -301,6 +301,15 @@ class MailgunBackendStandardEmailTests(MailgunBackendMockAPITestCase):
with self.assertRaises(AnymailUnsupportedFeature):
self.message.send()
def test_amp_html_alternative(self):
# Mailgun *does* support text/x-amp-html alongside text/html
self.message.attach_alternative("<p>HTML</p>", "text/html")
self.message.attach_alternative("<p>And AMP HTML</p>", "text/x-amp-html")
self.message.send()
data = self.get_api_call_data()
self.assertEqual(data["html"], "<p>HTML</p>")
self.assertEqual(data["amp-html"], "<p>And AMP HTML</p>")
def test_alternatives_fail_silently(self):
# Make sure fail_silently is respected
self.message.attach_alternative("{'not': 'allowed'}", "application/json")