MCPcopy
hub / github.com/django/django / test_attach_rfc822_message

Method test_attach_rfc822_message

tests/mail/tests.py:1203–1260  ·  view source on GitHub ↗

EmailMessage.attach() docs: "If you specify a mimetype of message/rfc822, it will also accept django.core.mail.EmailMessage and email.message.Message."

(self)

Source from the content-addressed store, hash-verified

1201 self.assertEqual(image_att.get_filename(), "test.png")
1202
1203 def test_attach_rfc822_message(self):
1204 """
1205 EmailMessage.attach() docs: "If you specify a mimetype of
1206 message/rfc822, it will also accept django.core.mail.EmailMessage and
1207 email.message.Message."
1208 """
1209 # django.core.mail.EmailMessage
1210 django_email = EmailMessage("child subject", "child body")
1211 # email.message.Message
1212 py_message = PyMessage()
1213 py_message["Subject"] = "child subject"
1214 py_message.set_payload("child body")
1215 # email.message.EmailMessage
1216 py_email_message = PyEmailMessage()
1217 py_email_message["Subject"] = "child subject"
1218 py_email_message.set_content("child body")
1219
1220 cases = [
1221 django_email,
1222 py_message,
1223 py_email_message,
1224 # Should also allow message serialized as str or bytes.
1225 py_message.as_string(),
1226 py_message.as_bytes(),
1227 ]
1228
1229 for child_message in cases:
1230 with self.subTest(child_type=child_message.__class__):
1231 email = EmailMessage("parent message", "parent body")
1232 email.attach(content=child_message, mimetype="message/rfc822")
1233 self.assertEqual(len(email.attachments), 1)
1234 self.assertIsInstance(email.attachments[0], EmailAttachment)
1235 self.assertEqual(email.attachments[0].mimetype, "message/rfc822")
1236
1237 # Make sure it is serialized correctly: a message/rfc822
1238 # attachment whose "body" content (payload) is the
1239 # "encapsulated" (child) message.
1240 attachments = self.get_raw_attachments(email)
1241 self.assertEqual(len(attachments), 1)
1242 rfc822_attachment = attachments[0]
1243 self.assertEqual(rfc822_attachment.get_content_type(), "message/rfc822")
1244
1245 attached_message = rfc822_attachment.get_content()
1246 self.assertEqual(attached_message["Subject"], "child subject")
1247 self.assertEqual(attached_message.get_content().rstrip(), "child body")
1248
1249 # Regression for #18967: Per RFC 2046 5.2.1, "No encoding other
1250 # than '7bit', '8bit', or 'binary' is permitted for the body of
1251 # a 'message/rfc822' entity." (Default CTE is "7bit".)
1252 cte = rfc822_attachment.get("Content-Transfer-Encoding", "7bit")
1253 self.assertIn(cte, ("7bit", "8bit", "binary"))
1254
1255 # Any properly declared CTE is allowed for the attached message
1256 # itself (including quoted-printable or base64). For the plain
1257 # ASCII content in this test, we'd expect 7bit.
1258 child_cte = attached_message.get("Content-Transfer-Encoding", "7bit")
1259 self.assertEqual(child_cte, "7bit")
1260 self.assertEqual(attached_message.get_content_type(), "text/plain")

Callers

nothing calls this directly

Calls 8

attachMethod · 0.95
EmailMessageClass · 0.90
set_payloadMethod · 0.80
as_bytesMethod · 0.80
get_raw_attachmentsMethod · 0.80
as_stringMethod · 0.45
get_content_typeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected