本文介绍python发送邮件模块smtplib以及相关MIME模块。
smtplib用于生成邮件发送的代理,发送邮件前需要通过MIMEText构造邮件内容。
发送纯文本邮件
下面是个发送纯文本邮件的例子。
1 | import smtplib |
MIMEText实例化一个邮件对象,内容为content,对于邮件标题Subject,发件人From,以及收件人To
需要以字典形式指出,或者通过add_header(下文会给出)添加,否则对方看不到这些信息。
想要通过smtp发送邮件,需要打开指定邮箱的smtp协议,以及设置smtp授权密码。我设置的是163邮箱的。
设置好密码后,将上述代码中的passwd改为你的密码,msg_from改为你的邮箱。smtplib可以通过SMTP_SSL
发送,也可以采用普通形式直接初始化,对应的两个参数分别是授权的smtp服务器地址和端口号,因为我
设置的是163的,所以使用smtp.163.com服务器地址,端口号和服务器地址读者可以自己去查。通过生成的
smtp实例,一次调用login,sendemail就可以发送了。最后记得调用quit退出。
发送一封纯文本邮件,看一下效果
我们发现发件人标题显示的只有邮箱地址,没有昵称,可以采用parseaddr和formataddr对发件人信息完善。
1 | def _format_addr(s): |
这样可以看到发件人的昵称了。我设置的是恋恋风辰。Header函数的作用是防止中文乱码。
Header对字符串按照utf-8方式编码。MIMEText中参数plain表示纯文本,utf-8表示纯文本
的编码方式。
发送html邮件
发送html邮件和之前发送纯文本类似,只需要将plain变为html,即可。
1 | def _format_addr(s): |
看看效果:
发送带附件的邮件
发送带附件的邮件,和之前不同,需要通过MIMEMultipart创建邮件实例,
然后将文本,附件等通过attach方法绑定到邮件实例上,然后一起发送。
1 | import smtplib |
MIMEMultipart创建邮件实例msg,将收件人,发件人,主题设置到msg上。
然后通过MIMEText创建html文本内容,调用msg.attach方法将文本内容绑定
到邮件上。同样的道理,打开一个图片,通过MIMEBase创建一个附件实例,
设置文件名,文件类型,绑定的id等等,最后通过set_payload加载到附件,
然后msg.attach绑定到邮件实例上。后面的发送流程和之前一样。
看看效果:
发送带图片的html邮件
想要在html中添加图片,并且在邮件正文中显示,只需要在html文本中引用
图片id即可。
1 | import smtplib |
mime.add_header(‘Content-ID’,'<image1>'
) 设置图片id为image1,
在html中引用image1就可以在邮件中文中显示图片了。
通过<img src="cid:image1">
方式进行引用。
Messge类的继承和派生关系
1 | Message |
MIMEBase继承于Message,MIMEMultipart继承于MIMEBase。
用MIMEText发送多种附件
1 | import smtplib |
大体原理和之前一样,通过MIMEText可以实现多种附件的发送。
注意格式改为base64,编码用utf-8,可以实现多种附件发送。
效果如下:
通过MIMEApplication发送多种附件
同样可以通过MIMEApplication发送多种附件。
1 | import smtplib |
效果和之前的一样,这就是python中利用smtplib和MIME构造邮件发送的案例。
我的公众号: