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')