summaryrefslogtreecommitdiffstats
path: root/Lib/smtplib.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/smtplib.py')
-rwxr-xr-xLib/smtplib.py32
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."""