fix: start to reconcile internal inconsistencies wrt multiple from values (#7935)
This commit is contained in:
parent
f5c132a20a
commit
3b5058a516
|
@ -92,7 +92,17 @@ def send_smtp(msg, bcc=None):
|
|||
'''
|
||||
mark = time.time()
|
||||
add_headers(msg)
|
||||
(fname, frm) = parseaddr(msg.get('From'))
|
||||
# N.B. We have a disconnect with most of this code assuming a From header value will only
|
||||
# have one address.
|
||||
# The frm computed here is only used as the envelope from.
|
||||
# Previous code simply ran `parseaddr(msg.get('From'))`, getting lucky if the string returned
|
||||
# from the get had more than one address in it. Python 3.9.20 changes the behavior of parseaddr
|
||||
# and that erroneous use of the function no longer gets lucky.
|
||||
# For the short term, to match behavior to date as closely as possible, if we get a message
|
||||
# that has multiple addresses in the From header, we will use the first for the envelope from
|
||||
from_tuples = getaddresses(msg.get_all('From', [settings.DEFAULT_FROM_EMAIL]))
|
||||
assertion('len(from_tuples)==1', note=f"send_smtp received multiple From addresses: {from_tuples}")
|
||||
_ , frm = from_tuples[0]
|
||||
addrlist = msg.get_all('To') + msg.get_all('Cc', [])
|
||||
if bcc:
|
||||
addrlist += [bcc]
|
||||
|
@ -446,6 +456,8 @@ def parse_preformatted(preformatted, extra=None, override=None):
|
|||
values = msg.get_all(key, [])
|
||||
if values:
|
||||
values = getaddresses(values)
|
||||
if key=='From':
|
||||
assertion('len(values)<2', note=f'parse_preformatted is constructing a From with multiple values: {values}')
|
||||
del msg[key]
|
||||
msg[key] = ',\n '.join(formataddr(v) for v in values)
|
||||
for key in ['Subject', ]:
|
||||
|
|
|
@ -53,7 +53,7 @@ class SendingMail(TestCase):
|
|||
|
||||
def test_send_mail_preformatted(self):
|
||||
msg = """To: to1@example.com, to2@example.com
|
||||
From: from1@ietf.org, from2@ietf.org
|
||||
From: from1@ietf.org
|
||||
Cc: cc1@example.com, cc2@example.com
|
||||
Bcc: bcc1@example.com, bcc2@example.com
|
||||
Subject: subject
|
||||
|
@ -63,7 +63,7 @@ body
|
|||
send_mail_preformatted(None, msg, {}, {})
|
||||
recv = outbox[-1]
|
||||
self.assertSameEmail(recv['To'], '<to1@example.com>, <to2@example.com>')
|
||||
self.assertSameEmail(recv['From'], 'from1@ietf.org, from2@ietf.org')
|
||||
self.assertSameEmail(recv['From'], 'from1@ietf.org')
|
||||
self.assertSameEmail(recv['Cc'], 'cc1@example.com, cc2@example.com')
|
||||
self.assertSameEmail(recv['Bcc'], None)
|
||||
self.assertEqual(recv['Subject'], 'subject')
|
||||
|
@ -71,14 +71,14 @@ body
|
|||
|
||||
override = {
|
||||
'To': 'oto1@example.net, oto2@example.net',
|
||||
'From': 'ofrom1@ietf.org, ofrom2@ietf.org',
|
||||
'From': 'ofrom1@ietf.org',
|
||||
'Cc': 'occ1@example.net, occ2@example.net',
|
||||
'Subject': 'osubject',
|
||||
}
|
||||
send_mail_preformatted(request=None, preformatted=msg, extra={}, override=override)
|
||||
recv = outbox[-1]
|
||||
self.assertSameEmail(recv['To'], '<oto1@example.net>, <oto2@example.net>')
|
||||
self.assertSameEmail(recv['From'], 'ofrom1@ietf.org, ofrom2@ietf.org')
|
||||
self.assertSameEmail(recv['From'], 'ofrom1@ietf.org')
|
||||
self.assertSameEmail(recv['Cc'], 'occ1@example.net, occ2@example.net')
|
||||
self.assertSameEmail(recv['Bcc'], None)
|
||||
self.assertEqual(recv['Subject'], 'osubject')
|
||||
|
@ -86,14 +86,14 @@ body
|
|||
|
||||
override = {
|
||||
'To': ['<oto1@example.net>', 'oto2@example.net'],
|
||||
'From': ['<ofrom1@ietf.org>', 'ofrom2@ietf.org'],
|
||||
'From': ['<ofrom1@ietf.org>'],
|
||||
'Cc': ['<occ1@example.net>', 'occ2@example.net'],
|
||||
'Subject': 'osubject',
|
||||
}
|
||||
send_mail_preformatted(request=None, preformatted=msg, extra={}, override=override)
|
||||
recv = outbox[-1]
|
||||
self.assertSameEmail(recv['To'], '<oto1@example.net>, <oto2@example.net>')
|
||||
self.assertSameEmail(recv['From'], '<ofrom1@ietf.org>, ofrom2@ietf.org')
|
||||
self.assertSameEmail(recv['From'], '<ofrom1@ietf.org>')
|
||||
self.assertSameEmail(recv['Cc'], '<occ1@example.net>, occ2@example.net')
|
||||
self.assertSameEmail(recv['Bcc'], None)
|
||||
self.assertEqual(recv['Subject'], 'osubject')
|
||||
|
|
Loading…
Reference in a new issue