一、email模块
SMTP是发送邮件的协议,Python对SMTP支持有email和smtplib两个模块,email负责构造邮件,smtplib负责发送邮件。
email.header.Header(s=None, charset=None, maxlinelen=None, header_name=None, continuation_ws=' ', errors='strict')
:邮件头s
:标头的值,也就是对应From、To、Subject的值。charset
:字符集格式,默认是ASCII,但是一般指定UTF-8格式以兼容更多字符。header_name
: 标头名,就是From、To、Subject、Time等;
email.mime.base.MIMEBase(_maintype, _subtype, **_params)
:这是MIME的一个基类。一般不需要在使用时创建实例。_maintype
:是内容类型,如text或者image。_subtype
:是内容的minor type类型,如plain或者gif。**_params
:是一个字典,直接传递给Message.add_header()。
email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]
:MIMEBase的一个子类,多个MIME对象的集合。_subtype
:默认值为mixed。boundary
:是MIMEMultipart的边界,默认边界是可数的。
email.mime.APPLICATION.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]])
:MIMEMultipart的一个子类。email.mime.audio. MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]])
:MIME音频对象。email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]])
:MIME二进制文件对象。email.mime.text.MIMEText(_text[,_subtype[,_charset]])
:MIME文本对象。_text
:是邮件内容,_subtype
:邮件类型,可以是text/plain(普通文本邮件),html/plain(html邮件)。charset
:编码,可以是gb2312等等。
email.mime.message.MIMEMessage(_msg[, _subtype])
:具体的一个message实例。msg=mail.Message.Message()
# 一个实例msg['from']='me@xxx.com'
# 自己的邮件地址msg['to']='friend@xxx.com'
# 发送到哪里msg['date']='2012-3-16'
# 时间日期msg['subject']='helloworld'
# 邮件主题
二、smtplib模块
SMTP是发送邮件的协议,Python对SMTP支持有email和smtplib两个模块,email负责构造邮件,smtplib负责发送邮件。
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
:SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行相关操作(如:登陆、发送邮件)。所有参数都是可选的。host
:smtp服务器主机名port
:smtp服务的端口,默认是25;如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。
smtplib.SMTP提供的方法:
SMTP.set_debuglevel(level)
:设置是否为调试模式。默认为False,即非调试模式,表示不输出任何调试信息。SMTP.connect([host[, port]])
:连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意: 也可以在host参数中指定端口号(如:smpt.yeah.net:25),这样就没必要给出port参数。SMTP.docmd(cmd[, argstring])
:向smtp服务器发送指令。可选参数argstring表示指令的参数。SMTP.helo([hostname])
:使用”helo”指令向服务器确认身份。相当于告诉smtp服务器“我是谁”。SMTP.has_extn(name)
:判断指定名称在服务器邮件列表中是否存在。出于安全考虑,smtp服务器往往屏蔽了该指令。SMTP.verify(address)
:判断指定邮件地址是否在服务器中存在。出于安全考虑,smtp服务器往往屏蔽了该指令。SMTP.login(user, password)
:登陆到smtp服务器。现在几乎所有的smtp服务器,都必须在验证用户信息合法之后才允许发送邮件。SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
:发送邮件。这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。SMTP.quit()
:断开与smtp服务器的连接,相当于发送”quit”指令。(很多程序中都用到了smtp.close())
三、发送邮件
1、发送文本邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 from email.header import Header
from email.mime.text import MIMEText
import smtplib
#一.构建邮件内容信息
message = MIMEText('邮件正文测试...此处省略一万字', 'plain', 'utf-8') #1.邮件正文,plain表示普通文本
message['Subject'] = Header('邮件标题测试', 'utf-8') #2.邮件标题,中文用Header编码
message['From'] = Header('发件人的名称测试', 'utf-8') #3.发件人名称
message['To'] = Header('收件人名称测试', 'utf-8') #4.收件人名称
#二.定义邮件服务器信息
mail_host = 'smpt.xxx.com' #1.邮件服务器
mail_user = 'username' #2.登录服务器的用户名
mail_pass = 'password' #3.登录服务器的密码
#三.定义发件人和收件人
sender = 'me@163.com' #1.发件人邮箱
receivers = ['friend@126.com'] #2.收件人邮箱,注意可以是列表
#四.邮件服务器发送邮件
smtp_server = smtplib.SMTP() #1.声明邮件服务器
smtp_server.connect(mail_host, 25) #2.连接服务器,端口25
smtp_server.login(mail_user, mail_pass) #3.登录服务器
smtp_server.sendmail(sender, receivers, message.as_string()) #4.服务器发送邮件
smtp_server.quit() #5.退出服务器
2、发送html邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 from email.header import Header
from email.mime.text import MIMEText
import smtplib
#一.构建邮件内容信息
#定义html格式内容
msg_html = """
<p>邮件正文测试...此处省略一万字</p>
<p><a href="http://www.baidu.com">点击进入百度</a></p>
"""
message = MIMEText(msg_html, 'html', 'utf-8') #1.邮件正文,html表示html格式
message['Subject'] = Header('邮件标题测试', 'utf-8') #2.邮件标题,中文用Header编码
message['From'] = Header('发件人的名称测试', 'utf-8') #3.发件人名称
message['To'] = Header('收件人名称测试', 'utf-8') #4.收件人名称
#二.定义邮件服务器信息
mail_host = 'smpt.xxx.com' #1.邮件服务器
mail_user = 'username' #2.登录服务器的用户名
mail_pass = 'password' #3.登录服务器的密码
#三.定义发件人和收件人邮箱
sender = 'me@163.com' #1.发件人邮箱
receivers = ['friend@126.com'] #2.收件人邮箱,注意可以是列表
#四.邮件服务器发送邮件
smtp_server = smtplib.SMTP() #1.声明邮件服务器
smtp_server.connect(mail_host, 25) #2.连接服务器,端口25
smtp_server.login(mail_user, mail_pass) #3.登录服务器
smtp_server.sendmail(sender, receivers, message.as_string()) #4.服务器发送邮件
smtp_server.quit() #5.退出服务器
3、发送带附件邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
#一.构建带附件的实例
message = MIMEMultipart() #1.带附件实例
message['Subject'] = Header('邮件标题测试', 'utf-8') #2.邮件标题,中文用Header编码
message['From'] = Header('发件人的名称测试', 'utf-8') #3.发件人名称
message['To'] = Header('收件人名称测试', 'utf-8') #4.收件人名称
#二、增加邮件正文内容
message.attach(MIMEText('邮件正文测试...此处省略一万字', 'plain', 'utf-8')) #1.邮件正文,plain表示普通文本
#三、添加附件
with open('/Users/tester/Downloads/test.xlsx', 'rb') as xlsxpart: #1.用with打开,防止不能关闭文件
att = MIMEText(xlsxpart.read(), 'base64', 'utf-8') #2.定义附件
att.add_header('Content-Disposition', 'attachment', filename='test.xlsx') #3.添加必要的头信息
message.attach(att) #4.添加附件
#四.定义邮件服务器信息
mail_host = 'smpt.xxx.com' #1.邮件服务器
mail_user = 'username' #2.登录服务器的用户名
mail_pass = 'password' #3.登录服务器的密码
#五.定义发件人和收件人
sender = 'me@163.com' #1.发件人邮箱
receivers = ['friend@126.com'] #2.收件人邮箱,注意可以是列表
#六.邮件服务器发送邮件
smtp_server = smtplib.SMTP() #1.声明邮件服务器
smtp_server.connect(mail_host, 25) #2.连接服务器,端口25
smtp_server.login(mail_user, mail_pass) #3.登录服务器
smtp_server.sendmail(sender, receivers, message.as_string()) #4.服务器发送邮件
smtp_server.quit() #5.退出服务器
4、发送带图片邮件
按照发送附件的方式,先把邮件作为附件添加进去,然后,在HTML中通过引用src="cid:0"
就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x
即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
import smtplib
#一.构建带附件的实例
msgroot = MIMEMultipart('relate') #1.带附件实例,relate可以存储图片
msgroot['Subject'] = Header('邮件标题测试', 'utf-8') #2.邮件标题,中文用Header编码
msgroot['From'] = Header('发件人的名称测试', 'utf-8') #3.发件人名称
msgroot['To'] = Header('收件人名称测试', 'utf-8') #4.收件人名称
#二、构建超文本实例
msgAlternative = MIMEMultipart('alternative') #1.arternative邮件可以同时存在纯文本和超文本内容
msgRoot.attach(msgAlternative) #2.添加到附件实例
#三、超文本实例添加html内容
#html内容,图片cid定义image1
msg_html = """
<p>邮件正文测试...此处省略一万字</p>
<p>图片展示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(msg_html, 'html', 'utf-8')) #添加html内容到超文本实例
#四、附件实例添加邮件正文内容
msgRoot.attach(MIMEText('邮件正文测试...此处省略一万字', 'plain', 'utf-8')) #1.邮件正文,plain表示普通文本
#五、添加图片附件
with open('/Users/tester/Downloads/test.png', 'rb') as imagepart: #1.用with打开,防止不能关闭文件
att = MIMEImage(imagepart.read(), 'base64', 'utf-8') #2.定义附件
att.add_header('Content-Disposition', 'attachment', filename='test.png') #3.添加必要的头信息
att.add_header('Content-ID', '<image1>') #4.头信息添加图片cid
msgRoot.attach(att) #5.添加附件
#六.定义邮件服务器信息
mail_host = 'smpt.xxx.com' #1.邮件服务器
mail_user = 'username' #2.登录服务器的用户名
mail_pass = 'password' #3.登录服务器的密码
#七.定义发件人和收件人
sender = 'me@163.com' #1.发件人邮箱
receivers = ['friend@126.com'] #2.收件人邮箱,注意可以是列表
#八.邮件服务器发送邮件
smtp_server = smtplib.SMTP() #1.声明邮件服务器
smtp_server.connect(mail_host, 25) #2.连接服务器,端口25
smtp_server.login(mail_user, mail_pass) #3.登录服务器
smtp_server.sendmail(sender, receivers, msgRoot.as_string()) #4.服务器发送邮件
smtp_server.quit() #5.退出服务器
5、发送邮件全示例
1 | # email操作 |
持续更新…
最后更新: 2018年12月04日 21:14