mirror of
https://github.com/python/cpython.git
synced 2026-04-22 03:41:08 +00:00
bpo-34424: Handle different policy.linesep lengths correctly. (GH-8803)
(cherry picked from commit 45b2f8893c)
Co-authored-by: Jens Troeger <jenstroeger@users.noreply.github.com>
This commit is contained in:
parent
7f485ea4fc
commit
c0abd0c8e9
3 changed files with 25 additions and 1 deletions
|
|
@ -2626,7 +2626,7 @@ def _refold_parse_tree(parse_tree, *, policy):
|
|||
want_encoding = False
|
||||
last_ew = None
|
||||
if part.syntactic_break:
|
||||
encoded_part = part.fold(policy=policy)[:-1] # strip nl
|
||||
encoded_part = part.fold(policy=policy)[:-len(policy.linesep)]
|
||||
if policy.linesep not in encoded_part:
|
||||
# It fits on a single line
|
||||
if len(encoded_part) > maxlen - len(lines[-1]):
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
from email import message_from_string, message_from_bytes
|
||||
from email.message import EmailMessage
|
||||
from email.generator import Generator, BytesGenerator
|
||||
from email.headerregistry import Address
|
||||
from email import policy
|
||||
from test.test_email import TestEmailBase, parameterize
|
||||
|
||||
|
|
@ -291,6 +292,27 @@ def test_smtputf8_policy(self):
|
|||
g.flatten(msg)
|
||||
self.assertEqual(s.getvalue(), expected)
|
||||
|
||||
def test_smtp_policy(self):
|
||||
msg = EmailMessage()
|
||||
msg["From"] = Address(addr_spec="foo@bar.com", display_name="Páolo")
|
||||
msg["To"] = Address(addr_spec="bar@foo.com", display_name="Dinsdale")
|
||||
msg["Subject"] = "Nudge nudge, wink, wink"
|
||||
msg.set_content("oh boy, know what I mean, know what I mean?")
|
||||
expected = textwrap.dedent("""\
|
||||
From: =?utf-8?q?P=C3=A1olo?= <foo@bar.com>
|
||||
To: Dinsdale <bar@foo.com>
|
||||
Subject: Nudge nudge, wink, wink
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 7bit
|
||||
MIME-Version: 1.0
|
||||
|
||||
oh boy, know what I mean, know what I mean?
|
||||
""").encode().replace(b"\n", b"\r\n")
|
||||
s = io.BytesIO()
|
||||
g = BytesGenerator(s, policy=policy.SMTP)
|
||||
g.flatten(msg)
|
||||
self.assertEqual(s.getvalue(), expected)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
Fix serialization of messages containing encoded strings when the
|
||||
policy.linesep is set to a multi-character string. Patch by Jens Troeger.
|
||||
Loading…
Add table
Add a link
Reference in a new issue