Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。
注意:使用前需要开启SMTP服务
案例:使用163邮箱来结合smtp模块发送邮件
准备工作:
注册或者登陆163邮箱,进入“设置”-->“POP3/SMTP/IMAP”,打开“POP3/SMTP服务”,短信验证后输入客户端授权密码保存
Python代码:
send_email.py:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 发送邮箱服务器
smtpserver = "smtp.163.com"
# 发送邮箱用户名密码
user = "nancyrm2018@163.com"
password = "输入自己的客户端授权密码"
# 发送和接收邮箱
sender = "nancyrm2018@163.com"
receive = "nancyrm2018@126.com"
# 发送邮件主题和内容
subject = "Web Selenium 自动化测试报告"
content = "<html><h1 style='color:red'>自动化测试,自学成才</h1></html>"
# HTML邮件正文
msg = MIMEText(content, 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = "nancyrm2018@163.com"
msg['To'] = "nancyrm2018@126.com"
# SSL协议端口号要使用465
smtp = smtplib.SMTP_SSL(smtpserver, 465)
# HELO向服务器标志用户身份
smtp.helo(smtpserver)
# 服务器返回结果确认
smtp.ehlo(smtpserver)
# 登录邮箱服务器用户名密码
smtp.login(user, password)
print("Send email start...")
smtp.sendmail(sender, receive, msg.as_string())
smtp.quit()
print("email send end!")
代码分析:
我们可以使用SMTP对象的sendmail方法发送邮件,其中部分方法如下:
login(user,password)方法参数说明如下:
- user:登录邮箱用户名
- password:登录邮箱密码
sendmail(from_addr,to_addrs,msg,..)方法参数说明如下:
- from_addr:邮件发送者地址
- to_addrs:字符串列表,邮件发送地址
- msg:发送信息
除SMTP模块,还用到了email模块,主要用来定义邮件的标题和正文:
Header()方法用来定义邮件标题
MIMETText()用于定义邮件正文,参数为html格式的文本。
实现结果:
登录126邮箱查看,显示内容如图:
带附件的邮件:
Python代码:
from email.mime.multipart import MIMEMultipart # ... send_file = open(r"E:\python_script\123.png", "rb").read() att = MIMEText(send_file, "base64", 'utf-8') att['Content-Type'] = 'application/octet-stream' att['Content-Disposition'] = 'attachment;filename="logo.png"' msgRoot = MIMEMultipart() msgRoot.attach(MIMEText(content, 'html', 'utf-8')) msgRoot['Subject'] = subject msgRoot['From'] = sender msgRoot['To'] = ','.join(receives) msgRoot.attach(att) #... smtp.sendmail(sender, receives, msgRoot.as_string())