diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 1a2bd2c36..a8fb5d8c4 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -26,6 +26,7 @@ Changelog
* Fix: Page Copy will now also copy ParentalManyToMany field relations (LB (Ben Johnston))
* Fix: Admin HTML header now includes correct language code (Matt Westcott)
* Fix: Unclear error message when saving image after focal point edit (Hugo van den Berg)
+ * Fix: `send_mail` now correctly uses the `html_message` kwarg for HTML messages (Tiago Requeijo)
2.4 (19.12.2018)
diff --git a/docs/releases/2.5.rst b/docs/releases/2.5.rst
index 75cdf0afd..8ed1c5552 100644
--- a/docs/releases/2.5.rst
+++ b/docs/releases/2.5.rst
@@ -42,6 +42,7 @@ Bug fixes
* Admin HTML header now includes correct language code (Matt Westcott)
* Unclear error message when saving image after focal point edit (Hugo van den Berg)
* Fix: Increase max length on ``Embed.thumbnail_url`` to 255 characters (Kevin Howbrook)
+ * Fix: ``send_mail`` now correctly uses the ``html_message`` kwarg for HTML messages (Tiago Requeijo)
Upgrade considerations
diff --git a/wagtail/admin/tests/tests.py b/wagtail/admin/tests/tests.py
index 2d771bd28..6442dc860 100644
--- a/wagtail/admin/tests/tests.py
+++ b/wagtail/admin/tests/tests.py
@@ -141,6 +141,29 @@ class TestSendMail(TestCase):
self.assertEqual(mail.outbox[0].to, ["nobody@email.com"])
self.assertEqual(mail.outbox[0].from_email, "webmaster@localhost")
+ def test_send_html_email(self):
+ """Test that the kwarg 'html_message' works as expected on send_mail by creating 'alternatives' on the EmailMessage object"""
+
+ send_mail("Test HTML subject", "TEXT content", ["has.html@email.com"], html_message="
Test HTML content
")
+ send_mail("Test TEXT subject", "TEXT content", ["mr.plain.text@email.com"])
+
+ # Check that the emails were sent
+ self.assertEqual(len(mail.outbox), 2)
+
+ # check that the first email is the HTML email
+ email_message = mail.outbox[0]
+ self.assertEqual(email_message.subject, "Test HTML subject")
+ self.assertEqual(email_message.alternatives, [('Test HTML content
', 'text/html')])
+ self.assertEqual(email_message.body, "TEXT content") # note: plain text will alwasy be added to body, even with alternatives
+ self.assertEqual(email_message.to, ["has.html@email.com"])
+
+ # confirm that without html_message kwarg we do not get 'alternatives'
+ email_message = mail.outbox[1]
+ self.assertEqual(email_message.subject, "Test TEXT subject")
+ self.assertEqual(email_message.alternatives, [])
+ self.assertEqual(email_message.body, "TEXT content")
+ self.assertEqual(email_message.to, ["mr.plain.text@email.com"])
+
class TestTagsAutocomplete(TestCase, WagtailTestUtils):
def setUp(self):
diff --git a/wagtail/admin/utils.py b/wagtail/admin/utils.py
index 0ef41196a..9668720df 100644
--- a/wagtail/admin/utils.py
+++ b/wagtail/admin/utils.py
@@ -222,13 +222,13 @@ def send_mail(subject, message, recipient_list, from_email=None, **kwargs):
password=kwargs.get('auth_password', None),
fail_silently=kwargs.get('fail_silently', None),
)
- kwargs = {
+ multi_alt_kwargs = {
'connection': connection,
'headers': {
'Auto-Submitted': 'auto-generated',
}
}
- mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, **kwargs)
+ mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, **multi_alt_kwargs)
html_message = kwargs.get('html_message', None)
if html_message:
mail.attach_alternative(html_message, 'text/html')