diff options
Diffstat (limited to 'Lib/smtplib.py')
-rwxr-xr-x | Lib/smtplib.py | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/Lib/smtplib.py b/Lib/smtplib.py index f1e4a27..fde6c69 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -208,24 +208,32 @@ class SMTP: specified during instantiation. """ - if not port: - i = host.find(':') + if not port and (host.find(':') == host.rfind(':')): + i = host.rfind(':') if i >= 0: host, port = host[:i], host[i+1:] try: port = int(port) except ValueError: raise socket.error, "nonnumeric port" if not port: port = SMTP_PORT - self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - if self.debuglevel > 0: print 'connect:', (host, port) - try: - self.sock.connect((host, port)) - except socket.error: - self.close() - raise - (code,msg)=self.getreply() - if self.debuglevel >0 : print "connect:", msg - return (code,msg) + if self.debuglevel > 0: print 'connect:', (host, port) + for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): + af, socktype, proto, canonname, sa = res + try: + self.sock = socket.socket(af, socktype, proto) + if self.debuglevel > 0: print 'connect:', (host, port) + self.sock.connect(sa) + except socket.error, msg: + if self.debuglevel > 0: print 'connect fail:', (host, port) + self.sock.close() + self.sock = None + continue + break + if not self.sock: + raise socket.error, msg + (code, msg) = self.getreply() + if self.debuglevel > 0: print "connect:", msg + return (code, msg) def send(self, str): """Send `str' to the server.""" |