[Python-checkins] bpo-32727: smtplib's SMTP.send_message behaves differently with from_addr and to_addrs (#5451)
R. David Murray
webhook-mailer at python.org
Tue Jan 30 19:03:09 EST 2018
https://github.com/python/cpython/commit/8d83e4ba7823827bcbc119db887004d5c3a63dc6
commit: 8d83e4ba7823827bcbc119db887004d5c3a63dc6
branch: master
author: Stéphane Wirtel <stephane at wirtel.be>
committer: R. David Murray <rdmurray at bitdance.com>
date: 2018-01-30T19:02:51-05:00
summary:
bpo-32727: smtplib's SMTP.send_message behaves differently with from_addr and to_addrs (#5451)
Do not pass the name field in the 'from' address in the SMTP envelope.
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 040ad4e05962..7991174fb5d7 100644
--- a/Lib/test/test_smtplib.py
+++ b/Lib/test/test_smtplib.py
@@ -825,6 +825,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):
@@ -833,7 +834,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)
@@ -1072,6 +1074,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 at example.com'))
+ message['To'] = email.utils.formataddr(('René', 'rene at example.com'))
+
+ self.assertDictEqual(smtp.send_message(message), {})
+
+ self.assertEqual(self.serv._addresses['from'], 'michael at example.com')
+ self.assertEqual(self.serv._addresses['tos'], ['rene at 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
More information about the Python-checkins
mailing list