From 89e28e13ecbf9fbcf235e16d453c08bbf2271244 Mon Sep 17 00:00:00 2001 From: greg Date: Thu, 30 Jan 2025 15:04:29 +0100 Subject: Fixed #36119 -- Fixed UnicodeEncodeError when attaching a file with 8bit Content-Transfer-Encoding. --- tests/mail/tests.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests') diff --git a/tests/mail/tests.py b/tests/mail/tests.py index 2bc1364bed..993cdc5f42 100644 --- a/tests/mail/tests.py +++ b/tests/mail/tests.py @@ -913,6 +913,30 @@ class MailTests(MailTestsMixin, SimpleTestCase): self.assertEqual(content, b"\xff") self.assertEqual(mimetype, "application/octet-stream") + def test_attach_8bit_rfc822_message_non_ascii(self): + """ + Attaching a message that uses 8bit content transfer encoding for + non-ASCII characters should not raise a UnicodeEncodeError (#36119). + """ + attachment = dedent( + """\ + Subject: A message using 8bit CTE + Content-Type: text/plain; charset=utf-8 + Content-Transfer-Encoding: 8bit + + ¡8-bit content! + """ + ).encode() + email = EmailMessage() + email.attach("attachment.eml", attachment, "message/rfc822") + attachments = self.get_raw_attachments(email) + self.assertEqual(len(attachments), 1) + self.assertEqual(attachments[0].get_content_type(), "message/rfc822") + attached_message = attachments[0].get_content() + self.assertEqual(attached_message.get_content().rstrip(), "¡8-bit content!") + self.assertEqual(attached_message["Content-Transfer-Encoding"], "8bit") + self.assertEqual(attached_message.get_content_type(), "text/plain") + def test_attach_mime_image(self): """ EmailMessage.attach() docs: "You can pass it -- cgit v1.3