Commit f123f84f authored by Guido van Rossum's avatar Guido van Rossum

Patch by Per Cederqvist, who writes:

"""
 - It needlessly used the makefile() method for each response that is
   read from the SMTP server.

 - If the remote SMTP server closes the connection unexpectedly the
   code raised an IndexError.  It now raises an SMTPServerDisconnected
   exception instead.

 - The code now checks that all lines in a multiline response actually
   contains an error code.
"""

The Dragon approves.
parent 9065ea36
......@@ -187,21 +187,30 @@ class SMTP:
- server response string corresponding to response code (multiline
responses are converted to a single, multiline string).
Raises SMTPServerDisconnected if end-of-file is reached.
"""
resp=[]
self.file = self.sock.makefile('rb')
if self.file is None:
self.file = self.sock.makefile('rb')
while 1:
line = self.file.readline()
if line == '':
self.close()
raise SMTPServerDisconnected("Connection unexpectedly closed")
if self.debuglevel > 0: print 'reply:', `line`
resp.append(string.strip(line[4:]))
code=line[:3]
#check if multiline resp
# Check that the error code is syntactically correct.
# Don't attempt to read a continuation line if it is broken.
try:
errcode = string.atoi(code)
except ValueError:
errcode = -1
break
# Check if multiline response.
if line[3:4]!="-":
break
try:
errcode = string.atoi(code)
except(ValueError):
errcode = -1
errmsg = string.join(resp,"\n")
if self.debuglevel > 0:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment