python SMTP 发送邮件几个常用的包与类:
email 包:
mime:
base.MIMEBase 构造一个message的组件,可以用add_header('设置头信息')
multipart.MIMEMultipart 产生一个中间件,可以用attach(组件)往里面添加组件。
text.MIMEText 构造一个纯文本。
header: 设置To、From、Sub 的非ascii编码
encoders:用于转换编码
utils:里面提供了一些工具方法。
具体代码:
1 #!C:\Python34 2 # -*- coding:utf-8 -*- 3 from email import encoders #提供各种转换编码的方法 4 from email.header import Header #将非ascii编码转换为ascii编码 5 from email.mime.text import MIMEText #用于发送纯文本格式的邮件 6 from email.mime.multipart import MIMEMultipart #用于产生一个中间件 7 from email.utils import parseaddr, formataddr #格式化收件人 地址 8 from email.mime.base import MIMEBase 9 10 import smtplib 11 import logging 12 13 def _format_addr(s): 14 name, addr = parseaddr(s) 15 return formataddr((Header(name, 'utf-8').encode(), addr)) 16 17 from_addr = 'xxxx';#input(u'请输入136邮箱账号:'); 18 password = 'xxxx';#input(u'请输入密码:') 19 to_addr = 'xxxx';#input(u'请输入对方邮箱:') 20 smtp_server = "xxxx"; 21 smtp_port = 25; 22 23 def send_mail (to_list,sub,content,base): 24 #to_list 接收者列表 25 # sub 邮件主题 26 # content 邮件内容 27 # base 附件名称 28 msg = MIMEMultipart(); 29 msg['From'] = _format_addr('Python 爱好者 <%s>'% from_addr) 30 msg['To'] = ';'.join (to_list) 31 msg['Subject'] = Header(sub,'utf-8').encode(); 32 33 msg.attach(MIMEText(content,'html','utf-8')); 34 #附件 35 with open(r'G:\temp\pictrue\\' + base,'rb') as f: 36 #设置附件的MIME和文件名 37 mime = MIMEBase('image','jpg',filename = base); 38 #设置必要的头信息 39 mime.add_header('Content-Desposition','attachment',filename = base); 40 mime.add_header('Content-ID','<0>'); 41 mime.add_header('X-Attachment-Id','0'); 42 #把附件内容添加进来 43 mime.set_payload(f.read()); 44 #转换为base64 45 encoders.encode_base64(mime); 46 #添加到MIMEMultipart 47 msg.attach(mime) 48 49 try: 50 server = smtplib.SMTP(smtp_server,smtp_port); 51 #建立安全连接 52 server.starttls(); 53 server.login(from_addr,password); 54 server.sendmail(from_addr,to_list,msg.as_string()) 55 return True; 56 except Exception as e : 57 logging.exception(e); 58 return False; 59 finally : 60 server.quit(); 61 print('server 关闭'); 62 #发送内容 63 content = r'<html><body><h3>Hello</h3><p>send By Python! wish you a happy holidays 想学习python 请点击<a href="http://www.python.org">python</a></p><img src="cid:0"></body></html>' 64 sub = '来自SMTP的问候' 65 base = '2.jpg' 66 if send_mail([to_addr],sub,content,base): 67 print('发送成功'); 68 else : 69 print('发送失败');