mirror of
https://github.com/python/cpython.git
synced 2026-05-07 02:51:00 +00:00
Merge #7484: no more <> around addresses in VRFY or EXPN
This commit is contained in:
commit
da7af4d7a1
3 changed files with 36 additions and 11 deletions
|
|
@ -152,6 +152,13 @@ def quoteaddr(addr):
|
|||
else:
|
||||
return "<%s>" % m
|
||||
|
||||
def _addr_only(addrstring):
|
||||
displayname, addr = email.utils.parseaddr(addrstring)
|
||||
if (displayname, addr) == ('', ''):
|
||||
# parseaddr couldn't parse it, so use it as is.
|
||||
return addrstring
|
||||
return addr
|
||||
|
||||
# Legacy method kept for backward compatibility.
|
||||
def quotedata(data):
|
||||
"""Quote data for email.
|
||||
|
|
@ -507,14 +514,14 @@ def data(self, msg):
|
|||
|
||||
def verify(self, address):
|
||||
"""SMTP 'verify' command -- checks for address validity."""
|
||||
self.putcmd("vrfy", quoteaddr(address))
|
||||
self.putcmd("vrfy", _addr_only(address))
|
||||
return self.getreply()
|
||||
# a.k.a.
|
||||
vrfy = verify
|
||||
|
||||
def expn(self, address):
|
||||
"""SMTP 'expn' command -- expands a mailing list."""
|
||||
self.putcmd("expn", quoteaddr(address))
|
||||
self.putcmd("expn", _addr_only(address))
|
||||
return self.getreply()
|
||||
|
||||
# some useful methods
|
||||
|
|
|
|||
|
|
@ -293,6 +293,23 @@ def testSendNeedingDotQuote(self):
|
|||
mexpect = '%s%s\n%s' % (MSG_BEGIN, m, MSG_END)
|
||||
self.assertEqual(self.output.getvalue(), mexpect)
|
||||
|
||||
def testSendNullSender(self):
|
||||
m = 'A test message'
|
||||
smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
|
||||
smtp.sendmail('<>', 'Sally', m)
|
||||
# XXX (see comment in testSend)
|
||||
time.sleep(0.01)
|
||||
smtp.quit()
|
||||
|
||||
self.client_evt.set()
|
||||
self.serv_evt.wait()
|
||||
self.output.flush()
|
||||
mexpect = '%s%s\n%s' % (MSG_BEGIN, m, MSG_END)
|
||||
self.assertEqual(self.output.getvalue(), mexpect)
|
||||
debugout = smtpd.DEBUGSTREAM.getvalue()
|
||||
sender = re.compile("^sender: <>$", re.MULTILINE)
|
||||
self.assertRegex(debugout, sender)
|
||||
|
||||
def testSendMessage(self):
|
||||
m = email.mime.text.MIMEText('A test message')
|
||||
smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
|
||||
|
|
@ -523,7 +540,7 @@ def testFailingHELO(self):
|
|||
|
||||
|
||||
sim_users = {'Mr.A@somewhere.com':'John A',
|
||||
'Ms.B@somewhere.com':'Sally B',
|
||||
'Ms.B@xn--fo-fka.com':'Sally B',
|
||||
'Mrs.C@somewhereesle.com':'Ruth C',
|
||||
}
|
||||
|
||||
|
|
@ -539,7 +556,7 @@ def testFailingHELO(self):
|
|||
sim_auth_login_password = 'C29TZXBHC3N3B3JK'
|
||||
|
||||
sim_lists = {'list-1':['Mr.A@somewhere.com','Mrs.C@somewhereesle.com'],
|
||||
'list-2':['Ms.B@somewhere.com',],
|
||||
'list-2':['Ms.B@xn--fo-fka.com',],
|
||||
}
|
||||
|
||||
# Simulated SMTP channel & server
|
||||
|
|
@ -563,15 +580,14 @@ def smtp_EHLO(self, arg):
|
|||
self.push(resp)
|
||||
|
||||
def smtp_VRFY(self, arg):
|
||||
raw_addr = email.utils.parseaddr(arg)[1]
|
||||
quoted_addr = smtplib.quoteaddr(arg)
|
||||
if raw_addr in sim_users:
|
||||
self.push('250 %s %s' % (sim_users[raw_addr], quoted_addr))
|
||||
# For max compatibility smtplib should be sending the raw address.
|
||||
if arg in sim_users:
|
||||
self.push('250 %s %s' % (sim_users[arg], smtplib.quoteaddr(arg)))
|
||||
else:
|
||||
self.push('550 No such user: %s' % arg)
|
||||
|
||||
def smtp_EXPN(self, arg):
|
||||
list_name = email.utils.parseaddr(arg)[1].lower()
|
||||
list_name = arg.lower()
|
||||
if list_name in sim_lists:
|
||||
user_list = sim_lists[list_name]
|
||||
for n, user_email in enumerate(user_list):
|
||||
|
|
@ -703,8 +719,7 @@ def testVRFY(self):
|
|||
self.assertEqual(smtp.vrfy(email), expected_known)
|
||||
|
||||
u = 'nobody@nowhere.com'
|
||||
expected_unknown = (550, ('No such user: %s'
|
||||
% smtplib.quoteaddr(u)).encode('ascii'))
|
||||
expected_unknown = (550, ('No such user: %s' % u).encode('ascii'))
|
||||
self.assertEqual(smtp.vrfy(u), expected_unknown)
|
||||
smtp.quit()
|
||||
|
||||
|
|
|
|||
|
|
@ -234,6 +234,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #7484: smtplib no longer puts <> around addresses in VRFY and EXPN
|
||||
commands; they aren't required and in fact postfix doesn't support that form.
|
||||
|
||||
- Issue #12273: Remove ast.__version__. AST changes can be accounted for by
|
||||
checking sys.version_info or sys._mercurial.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue