diff --git a/anymail/utils.py b/anymail/utils.py index 080a1f9..403b406 100644 --- a/anymail/utils.py +++ b/anymail/utils.py @@ -285,6 +285,7 @@ class Attachment: if self.content is None: self.content = attachment.as_bytes() self.mimetype = attachment.get_content_type() + self.content_type = attachment["Content-Type"] # includes charset if provided content_disposition = attachment.get_content_disposition() if content_disposition == 'inline' or (not content_disposition and 'Content-ID' in attachment): @@ -294,6 +295,7 @@ class Attachment: self.cid = unquote(self.content_id) # without the <, > else: (self.name, self.content, self.mimetype) = attachment + self.content_type = self.mimetype self.name = force_non_lazy(self.name) self.content = force_non_lazy(self.content) @@ -304,6 +306,8 @@ class Attachment: self.mimetype, _ = mimetypes.guess_type(self.name) if self.mimetype is None: self.mimetype = DEFAULT_ATTACHMENT_MIME_TYPE + if self.content_type is None: + self.content_type = self.mimetype @property def b64content(self): diff --git a/tests/test_utils.py b/tests/test_utils.py index d8a3f9b..161a7fb 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -4,6 +4,7 @@ import base64 import copy import pickle from email.mime.image import MIMEImage +from email.mime.text import MIMEText from django.http import QueryDict from django.test import SimpleTestCase, RequestFactory, override_settings @@ -217,6 +218,11 @@ class NormalizedAttachmentTests(SimpleTestCase): self.assertFalse(att.inline) self.assertIsNone(att.content_id) # ignored for non-inline Attachment + def test_content_type(self): + att = Attachment(MIMEText("text", "plain", "iso8859-1"), "ascii") + self.assertEqual(att.mimetype, "text/plain") + self.assertEqual(att.content_type, 'text/plain; charset="iso8859-1"') + class LazyCoercionTests(SimpleTestCase): """Test utils.is_lazy and force_non_lazy*"""