Issue 4302: smtplib.py initialisation defect (original) (raw)

smtplib does not initialise the valriable 'sock' in the case where 'host' is NULL on instantiation of smtplib.SMTP.

Eg:

% python Python 2.5.2 (r252:60911, Oct 5 2008, 19:29:17) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information.

import smtplib client=smtplib.SMTP('') client.sendmail('from@home', 'to@home', 'test') Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.5/smtplib.py", line 676, in sendmail if not (200 <= self.ehlo()[0] <= 299): File "/usr/lib/python2.5/smtplib.py", line 397, in ehlo self.putcmd("ehlo", name or self.local_hostname) File "/usr/lib/python2.5/smtplib.py", line 333, in putcmd self.send(str) File "/usr/lib/python2.5/smtplib.py", line 318, in send if self.sock: AttributeError: SMTP instance has no attribute 'sock'

The fix is to add "self.sock = None" in init if host is not set, and then the behaviour is much more helpful:

% python Python 2.5.2 (r252:60911, Oct 5 2008, 19:29:17) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information.

import smtplib client=smtplib.SMTP('') client.sendmail('from@home', 'to@home', 'test') Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.5/smtplib.py", line 678, in sendmail if not (200 <= self.ehlo()[0] <= 299): File "/usr/lib/python2.5/smtplib.py", line 399, in ehlo self.putcmd("ehlo", name or self.local_hostname) File "/usr/lib/python2.5/smtplib.py", line 335, in putcmd self.send(str) File "/usr/lib/python2.5/smtplib.py", line 327, in send raise SMTPServerDisconnected('please run connect() first') smtplib.SMTPServerDisconnected: please run connect() first