bpo-32727: smtplib's SMTP.send_message behaves differently with from_addr and to_addrs (GH-5451) (#5455)

https://github.com/python/cpython/commit/85a92d00bd278022cc00fda6b124c06f614... commit: 85a92d00bd278022cc00fda6b124c06f614c5ebb branch: 3.6 author: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> committer: R. David Murray <rdmurray@bitdance.com> date: 2018-01-31T15:54:09-05:00 summary: bpo-32727: smtplib's SMTP.send_message behaves differently with from_addr and to_addrs (GH-5451) (#5455) Do not pass the name field in the 'from' address in the SMTP envelope. (cherry picked from commit 8d83e4ba7823827bcbc119db887004d5c3a63dc6) Co-authored-by: Stéphane Wirtel <stephane@wirtel.be> files: A Misc/NEWS.d/next/Library/2018-01-30-17-46-18.bpo-32727.aHVsRC.rst M Lib/smtplib.py M Lib/test/test_smtplib.py diff --git a/Lib/smtplib.py b/Lib/smtplib.py index 5e422b704ad4..b679875fd2c5 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -933,6 +933,7 @@ def send_message(self, msg, from_addr=None, to_addrs=None, from_addr = (msg[header_prefix + 'Sender'] if (header_prefix + 'Sender') in msg else msg[header_prefix + 'From']) + from_addr = email.utils.getaddresses([from_addr])[0][1] if to_addrs is None: addr_fields = [f for f in (msg[header_prefix + 'To'], msg[header_prefix + 'Bcc'], diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py index dd3a6eeca69c..67b3b478f76f 100644 --- a/Lib/test/test_smtplib.py +++ b/Lib/test/test_smtplib.py @@ -818,6 +818,7 @@ class SimSMTPServer(smtpd.SMTPServer): def __init__(self, *args, **kw): self._extra_features = [] + self._addresses = {} smtpd.SMTPServer.__init__(self, *args, **kw) def handle_accepted(self, conn, addr): @@ -826,7 +827,8 @@ def handle_accepted(self, conn, addr): decode_data=self._decode_data) def process_message(self, peer, mailfrom, rcpttos, data): - pass + self._addresses['from'] = mailfrom + self._addresses['tos'] = rcpttos def add_feature(self, feature): self._extra_features.append(feature) @@ -1066,6 +1068,21 @@ def test_send_unicode_without_SMTPUTF8(self): self.assertRaises(UnicodeEncodeError, smtp.sendmail, 'Alice', 'Böb', '') self.assertRaises(UnicodeEncodeError, smtp.mail, 'Älice') + def test_name_field_not_included_in_envelop_addresses(self): + smtp = smtplib.SMTP( + HOST, self.port, local_hostname='localhost', timeout=3 + ) + self.addCleanup(smtp.close) + + message = EmailMessage() + message['From'] = email.utils.formataddr(('Michaël', 'michael@example.com')) + message['To'] = email.utils.formataddr(('René', 'rene@example.com')) + + self.assertDictEqual(smtp.send_message(message), {}) + + self.assertEqual(self.serv._addresses['from'], 'michael@example.com') + self.assertEqual(self.serv._addresses['tos'], ['rene@example.com']) + class SimSMTPUTF8Server(SimSMTPServer): diff --git a/Misc/NEWS.d/next/Library/2018-01-30-17-46-18.bpo-32727.aHVsRC.rst b/Misc/NEWS.d/next/Library/2018-01-30-17-46-18.bpo-32727.aHVsRC.rst new file mode 100644 index 000000000000..22c219636de2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-01-30-17-46-18.bpo-32727.aHVsRC.rst @@ -0,0 +1 @@ +Do not include name field in SMTP envelope from address. Patch by Stéphane Wirtel
participants (1)
-
R. David Murray