Bläddra i källkod

Fixed #26344 -- Made EmailMessage include alternatives when the body is empty and it has attachments.

Igor Tokarev 7 år sedan
förälder
incheckning
af35c69a3c
2 ändrade filer med 12 tillägg och 1 borttagningar
  1. 1 1
      django/core/mail/message.py
  2. 11 0
      tests/mail/tests.py

+ 1 - 1
django/core/mail/message.py

@@ -354,7 +354,7 @@ class EmailMessage:
             encoding = self.encoding or settings.DEFAULT_CHARSET
             body_msg = msg
             msg = SafeMIMEMultipart(_subtype=self.mixed_subtype, encoding=encoding)
-            if self.body:
+            if self.body or body_msg.is_multipart():
                 msg.attach(body_msg)
             for attachment in self.attachments:
                 if isinstance(attachment, MIMEBase):

+ 11 - 0
tests/mail/tests.py

@@ -319,6 +319,17 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
         self.assertEqual(msg.message()['To'], '=?iso-8859-1?q?S=FCrname=2C_Firstname?= <to@example.com>')
         self.assertEqual(msg.message()['Subject'], '=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=')
 
+    def test_safe_mime_multipart_with_attachments(self):
+        """
+        EmailMultiAlternatives includes alternatives if the body is empty and
+        it has attachments.
+        """
+        msg = EmailMultiAlternatives(body='')
+        html_content = '<p>This is <strong>html</strong></p>'
+        msg.attach_alternative(html_content, 'text/html')
+        msg.attach('example.txt', 'Text file content', 'text/plain')
+        self.assertIn(html_content, msg.message().as_string())
+
     def test_encoding(self):
         """
         Regression for #12791 - Encode body correctly with other encodings