diff --git a/tests/mail/tests.py b/tests/mail/tests.py index 4e4930f221..aea757ad1d 100644 --- a/tests/mail/tests.py +++ b/tests/mail/tests.py @@ -1027,21 +1027,9 @@ class MailTests(HeadersCheckMixin, SimpleTestCase): ) self.assertNotIn(b">From the future", email.message().as_bytes()) - def test_dont_base64_encode(self): - # Ticket #3472 - # Shouldn't use Base64 encoding at all - msg = EmailMessage( - "Subject", - "UTF-8 encoded body", - "bounce@example.com", - ["to@example.com"], - headers={"From": "from@example.com"}, - ) - self.assertIn(b"Content-Transfer-Encoding: 7bit", msg.message().as_bytes()) - - # Ticket #11212 - # Shouldn't use quoted printable, should detect it can represent - # content with 7 bit data. + def test_body_content_transfer_encoding(self): + # Shouldn't use base64 or quoted-printable, instead should detect it + # can represent content with 7-bit data (#3472, #11212). msg = EmailMessage( "Subject", "Body with only ASCII characters.", @@ -1052,8 +1040,8 @@ class MailTests(HeadersCheckMixin, SimpleTestCase): s = msg.message().as_bytes() self.assertIn(b"Content-Transfer-Encoding: 7bit", s) - # Shouldn't use quoted printable, should detect it can represent - # content with 8 bit data. + # Shouldn't use base64 or quoted-printable, instead should detect + # it can represent content with 8-bit data. msg = EmailMessage( "Subject", "Body with latin characters: àáä.", @@ -1063,9 +1051,16 @@ class MailTests(HeadersCheckMixin, SimpleTestCase): ) s = msg.message().as_bytes() self.assertIn(b"Content-Transfer-Encoding: 8bit", s) + # The following test is left over from Python 2 and can be safely removed. + # 8bit CTE within a Unicode str is not meaningful, and Python's modern + # email api won't generate it. (The test still works with the legacy api.) s = msg.message().as_string() self.assertIn("Content-Transfer-Encoding: 8bit", s) + # Long body lines that require folding should use quoted-printable or base64, + # whichever is shorter. However, Python's legacy email API avoids re-folding + # non-ASCII text and just uses CTE 8bit. (The modern API would correctly choose + # base64 here. Any of these is deliverable.) msg = EmailMessage( "Subject", "Body with non latin characters: А Б В Г Д Е Ж Ѕ З И І К Л М Н О П.", @@ -1075,6 +1070,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase): ) s = msg.message().as_bytes() self.assertIn(b"Content-Transfer-Encoding: 8bit", s) + # The following test is left over from Python 2. s = msg.message().as_string() self.assertIn("Content-Transfer-Encoding: 8bit", s)