python SMTP 发送邮件

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:	emppictrue\'  + 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('发送失败');
View Code
原文地址:https://www.cnblogs.com/hf-china/p/5130626.html