EmailMessage.attach() docs: "If you specify a mimetype of message/rfc822, it will also accept django.core.mail.EmailMessage and email.message.Message."
(self)
| 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") |
nothing calls this directly
no test coverage detected