Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
da7af4d7
Commit
da7af4d7
authored
Jul 18, 2011
by
R David Murray
Browse files
Options
Browse Files
Download
Plain Diff
Merge #7484: no more <> around addresses in VRFY or EXPN
parents
a8713b14
4634676c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
36 additions
and
11 deletions
+36
-11
Lib/smtplib.py
Lib/smtplib.py
+9
-2
Lib/test/test_smtplib.py
Lib/test/test_smtplib.py
+24
-9
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/smtplib.py
View file @
da7af4d7
...
...
@@ -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 @@ class SMTP:
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
...
...
Lib/test/test_smtplib.py
View file @
da7af4d7
...
...
@@ -293,6 +293,23 @@ class DebuggingServerTests(unittest.TestCase):
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 @@ class BadHELOServerTests(unittest.TestCase):
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 @@ sim_auth_credentials = {
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 @@ class SimSMTPChannel(smtpd.SMTPChannel):
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 @@ class SMTPSimTests(unittest.TestCase):
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
()
...
...
Misc/NEWS
View file @
da7af4d7
...
...
@@ -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.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment