diff options
author | bsiem <52461103+bsiem@users.noreply.github.com> | 2019-08-21 23:00:39 (GMT) |
---|---|---|
committer | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-08-21 23:00:39 (GMT) |
commit | df0c21ff46c5c37b6913828ef8c7651f523432f8 (patch) | |
tree | 9bb5e4b73f90cf4a2b2f8f6f8f33f988953504ed /Lib/email | |
parent | 48ede6b8f685669f53d26ae8456647af42ae3dae (diff) | |
download | cpython-df0c21ff46c5c37b6913828ef8c7651f523432f8.zip cpython-df0c21ff46c5c37b6913828ef8c7651f523432f8.tar.gz cpython-df0c21ff46c5c37b6913828ef8c7651f523432f8.tar.bz2 |
bpo-37482: Fix email address name with encoded words and special chars (GH-14561)
Special characters in email address header display names are normally
put within double quotes. However, encoded words (=?charset?x?...?=) are
not allowed withing double quotes. When the header contains a word with
special characters and another word that must be encoded, the first one
must also be encoded.
In the next example, the display name in the From header is quoted and
therefore the comma is allowed; in the To header, the comma is not
within quotes and not encoded, which is not allowed and therefore
rejected by some mail servers.
From: "Foo Bar, France" <foo@example.com>
To: Foo Bar, =?utf-8?q?Espa=C3=B1a?= <foo@example.com>
https://bugs.python.org/issue37482
Diffstat (limited to 'Lib/email')
-rw-r--r-- | Lib/email/_header_value_parser.py | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py index ea33bd8..b500394 100644 --- a/Lib/email/_header_value_parser.py +++ b/Lib/email/_header_value_parser.py @@ -2743,6 +2743,9 @@ def _refold_parse_tree(parse_tree, *, policy): wrap_as_ew_blocked -= 1 continue tstr = str(part) + if part.token_type == 'ptext' and set(tstr) & SPECIALS: + # Encode if tstr contains special characters. + want_encoding = True try: tstr.encode(encoding) charset = encoding |