mirror of https://github.com/python/cpython
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.
This commit is contained in:
parent
1e17d4aaff
commit
8d83e4ba78
|
@ -933,6 +933,7 @@ class SMTP:
|
|||
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'],
|
||||
|
|
|
@ -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 @@ class SimSMTPServer(smtpd.SMTPServer):
|
|||
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 @@ class SMTPSimTests(unittest.TestCase):
|
|||
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):
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Do not include name field in SMTP envelope from address. Patch by Stéphane Wirtel
|
Loading…
Reference in New Issue