SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib
和email
两个模块,email
负责构造邮件,smtplib
负责发送邮件。
发送纯文本文件
import smtplib
from email.mime.text import MIMEText
mail_user, mail_pass = "xxxxxx@qq.com", 'xxxxxxxxxxxx'
receivers = ['xxx@xxxx.com', 'xxxx@xxxx.com']
# 构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。
message = MIMEText("邮件内容", 'plain', 'utf-8')
try:
smtp = smtplib.SMTP() # 创建一个SMTP实例
smtp.connect('smtp.qq.com', 25) # 连接到stmp服务器,默认端口为25
smtp.login(mail_user, mail_pass) # 设置登录用户名和用户密码
smtp.sendmail(mail_user, receivers, message.as_string()) # 发送邮件,receivers是一个列表,可以同时给对多个邮箱发送邮件
print("邮件发送成功")
except smtplib.SMTPException:
print("邮件发送失败")
发送HTML
无论是纯文本内容还是html或者二进制内容,都是通过email这个库来实现的
msg = MIMEText('<html><body><h1>Hello</h1>' +
'<p>send by <a href="http://www.python.org">Python</a>...</p>' +
'</body></html>', 'html', 'utf-8') # 设置第二个参数为html
发送附件
1、实例化一个MIMEMultipart对象
2、attach一个MIMEText对象作为邮件正文
3、attach MIMEBase对象作为附件
msg = MIMEMultipart()
msg.attach(MIMEText("附件", 'plain', 'utf-8'))
with open('emailDemo.py', 'rb') as fp:
# # 设置附件的MIME和文件名
attach = MIMEBase('text', 'plain', filename='emailDemo.py')
# 读入文件
attach.set_payload(fp.read())
# 加上必要的头信息:
attach.add_header('Content-Disposition', 'attachment', filename='emailDemo.py')
attach.add_header('Content-ID', '<0>')
attach.add_header('X-Attachment-Id', '0')
# # 用Base64编码
encoders.encode_base64(attach)
msg.attach(attach)