Add example about os.path.walk , which may used to implete --recursive option
[xmailer.git] / smtpssl.py
blob27d1733a086b71ed78c8ffa03206210a77cd30e9
1 #-*- encoding: utf-8 -*-
3 import os, sys, string, socket
4 import smtplib
7 class SMTP_SSL (smtplib.SMTP):
8 """ SMTP class over OpenSSL , with default port 465 """
9 def __init__(self, host='', port=465, local_hostname=None, key=None, cert=None):
10 self.cert = cert
11 self.key = key
12 smtplib.SMTP.__init__(self, host, port, local_hostname)
14 def connect(self, host='localhost', port=465):
15 if not port and (host.find(':') == host.rfind(':')):
16 i = host.rfind(':')
17 if i >= 0:
18 host, port = host[:i], host[i+1:]
19 try: port = int(port)
20 except ValueError:
21 raise socket.error, "nonnumeric port"
22 if not port: port = 654
23 if self.debuglevel > 0: print>>stderr, 'connect:', (host, port)
24 msg = "getaddrinfo returns an empty list"
25 self.sock = None
26 for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
27 af, socktype, proto, canonname, sa = res
28 try:
29 self.sock = socket.socket(af, socktype, proto)
30 if self.debuglevel > 0: print>>stderr, 'connect:', (host, port)
31 self.sock.connect(sa)
32 # 新增加的创建ssl连接
33 sslobj = socket.ssl(self.sock, self.key, self.cert)
34 except socket.error, msg:
35 if self.debuglevel > 0:
36 print>>stderr, 'connect fail:', (host, port)
37 if self.sock:
38 self.sock.close()
39 self.sock = None
40 continue
41 break
42 if not self.sock:
43 raise socket.error, msg
45 # 设置ssl
46 self.sock = smtplib.SSLFakeSocket(self.sock, sslobj)
47 self.file = smtplib.SSLFakeFile(sslobj);
49 (code, msg) = self.getreply()
50 if self.debuglevel > 0: print>>stderr, "connect:", msg
51 return (code, msg)