python SMTP 发送邮件几个常用的包与类:
email 包:
mime:
base.MIMEBase 构造一个message的组件,可以用add_header('设置头信息')
multipart.MIMEMultipart 产生一个中间件,可以用attach(组件)往里面添加组件。
text.MIMEText 构造一个纯文本。
header: 设置To、From、Sub 的非ascii编码
encoders:用于转换编码
utils:里面提供了一些工具方法。
具体代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 smtplib11 import logging12 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 #转换为base6445 encoders.encode_base64(mime);46 #添加到MIMEMultipart47 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'Hello
send By Python! wish you a happy holidays 想学习python 请点击python
'64 sub = '来自SMTP的问候'65 base = '2.jpg'66 if send_mail([to_addr],sub,content,base):67 print('发送成功');68 else :69 print('发送失败');