用python发送邮件的基本原理
基本步骤
- 引入python的标准模块,email.message.Message和smtplib。
- 创建一个email.message.Message实例。
- 添加邮件头必须有的字段,例如’From’,‘To’。
- 添加邮件内容。根据内容的不同,调用不同的方法。
* 最简单的方式,调用message.set_content。
* 最简单的方式,调用message.set_content。
* html内容有内嵌资源内容,调用message.add_related。
* 有附件,调用message.add_attachment。 - 创建一个stmplib实例。
- 在stmp实例里设置邮箱smtp服务器地址、账号、密码。
- 如果smtp服务器不在本机,登录stmp服务器,用stmplib.login。
- 发送邮件,调用smtp.send_message。
说明
- 邮件体及邮件内的内容主要有3中类型。
* multipart-alternative: 邮件体内的同级内容,根据邮箱系统的环境,只显示最优效果的一个内容。
* multipart-related: 邮件体内的内容,显示一个主体内容,其他内容以相关的内联方式显示在主体内。一般主体是html内容,其他是要显示在html中的图片、音乐、视频。关联是通过Content-来实现。
* multipart-mixed: 邮件体内各种内容,包括前面两种,另外还可以处理附件。 - smtp的方式可以是普通的smtp(用smtp.SMTP),或者SSL方式(用smtp.SMTP_SSL)。
- smtp.sendmail发送内容只能是文本的内容(编码后的二进制文件也可以);smtp.send_message发送内容可以是未编码的内容,内部处理后,会调用sendmail发送。
- message.set_content,message.add_alternative,message.add_related,message.add_attachment的内核会调用email.contentmanager.set_content。根据邮件内容的不同,需要的参数也有不同,具体参考官方文档,content manager instance。
- 邮件的编码有两种,1)based64编码 2)QP编码。
- 邮件体内容可以无限嵌套,邮件体内也可以是另一个邮件,会以附件的eml格式呈现。
示例
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg['Subject'] = 'use EmailMessage'
msg['From'] = 'aipython@gmailx.com'
msg['To'] = 'datadriver'
msg.set_content('a email test useing Emailmessage.')
s = smtplib.SMTP('smtp.gmailx.com')
s.set_debuglevel(1)
s.login('aipython', 'Iq349nGkPjWHFpz3')
s.sendmail('datadriver@gmailx.com', msg.as_string())
s.quit()
邮件结构的图示
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/96866358eb370b3597b7aea02c6ad2f2.png)