🔥 交流讨论:欢迎加入我们一起学习!
🔥 资源分享:耗时200+小时精选的「软件测试」资料包
🔥 教程推荐:火遍全网的《软件测试》教程
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
前言
SMTP(Simple Mail Transfer Protocol)也就是简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。python的smtplib
模块就提供了一种很方便的途径发送电子邮件,它对smtp协议进行了简单的封装。
python发邮件主要需要两个模块:smtplib
和email
,这两个模块是python自带的库,import即可使用。smtplib
主要负责发送邮件,即一个发送邮件的动作,如连接邮箱服务器,登录邮箱,发送邮件。email
主要负责构造邮件,指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
smtp授权
上面已经说到发送邮件是基于smtp服务的,那么我们就需要一个可以登录smtp服务器的账号及授权码,这里以qq邮箱为例,登录qq邮箱后,在设置》账户这里就可以开启smtp,开启后发送短信获取授权码即可。
发送邮件
涉及的部分参数说明:
- 连接到smtp服务器:
smtplib.SMTP_SSL(smtp服务器地址, 端口号)
- 登录smtp服务器:
smtp.login(smtp邮件地址, 登录smtp的授权码)
- 构造邮件对象:
MIMEMultipart()
- 创建邮件内容:
MIMEText(邮件内容, "plain", "utf8")
两个参数文本类型,编码格式;如果要发送html格式的邮件内容,则把plain
(默认)替换成html
- 把相关内容添加到邮件:
smg.attach(具体的内容)
,添加邮件内容 - 设置邮件主题:
smg["Subject"] = 主题内容
- 设置邮件发件人:
smg["From"] = 邮件地址
- 设置邮件收件人:
smg["To"] = 邮件地址
- 发送邮件:
smtp.send_message(邮件对象, from_addr=发件人邮件地址, to_addrs=收件人邮件地址)
如果有多个收件人则用list格式传给to_addrs
- 创建附件:
MIMEApplication(附件内容)
- 创建图片:
MIMEImage(图片内容)
,与附件一样 - 设置附件或图片等:
file_msg.add_header(\_name, \_value, **\_params)
:扩展标题设置,_name为要添加的标题字段,_value为标题的值。msg.add_header('Content-ID', 'imgid')
#设置图片IDmsg.add_header('Content-Disposition', 'attachment', filename='test.xlsx')
#为附件添加一个标题msg.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', '中文标题'))
#添加非ASCII字符时需指定编码
python
import smtplib from email.mime.text import MIMEText # 创建文本内容的邮件内容 from email.mime.multipart import MIMEMultipart # 创建带附件的实例 from email.mime.application import MIMEApplication # 用于创建附件的 from email.mime.image import MIMEImage # 用于创建图片,与添加附件一样的,下面不做举例 # 第一步: 连接到smtp服务器 smtp = smtplib.SMTP_SSL("smtp.qq.com", 465) smtp.login("xxxxxx@qq.com","afajccbab") # 第二步:构建邮件 smg = MIMEMultipart() text_smg = MIMEText("这是邮件文本内容", "plain", "utf8") # 邮件内容 smg.attach(text_smg) # 添加到邮件 # 添加附件 file_msg = MIMEApplication(open(r"C:\project\test\reports\report.html","rb").read()) file_msg.add_header('content-disposition', 'attachment', filename='report.html') smg.attach(file_msg) # 添加到邮件 smg["Subject"] = "测试测试" # 主题 smg["From"] = "aaaaaa@qq.com" # 邮件内显示的发件人 smg["To"] = "bbbbb@163.com" # 邮件内显示的收件人 # 第三步发送邮件 smtp.send_message(smg, from_addr="aaaaaa@qq.com", to_addrs="bbbbb@163.com")
还有更多的用法,有兴趣的可以再深入研究。
封装及应用
下面是一个简单的封装例子,可以根据自己的需要优化,甚至可以把邮件的主题、发件人、收件人以及smtp的登录邮箱授权密码等提取出来放到配置文件来维护。
python
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication def send_email(file_path): smtp = smtplib.SMTP_SSL("smtp.qq.com",465) smtp.login("xxxxx@qq.com","smtp登录密码") smg = MIMEMultipart() text_smg = MIMEText("这是邮件文本内容", "plain", "utf8") smg.attach(text_smg) file_msg = MIMEApplication(open(file_path,"rb").read()) file_msg.add_header('content-disposition', 'attachment', filename='report.html') smg.attach(file_msg) smg["Subject"] = "测试报告" smg["From"] = "aaaaaa@qq.com" smg["To"] = "bbbbbbb@163.com" smtp.send_message(smg,from_addr="aaaaaa@qq.com",to_addrs="bbbbbbb@163.com")
测试报告都是测试用例运行完之后才生成,那么我们就可以把发邮件这一步放到测试报告生成之后:
python
import unittest import os from common.contants import CASE_DIR, REPORT_DIR from common.send_email import send_email # 第一步:创建测试套件 suite = unittest.TestSuite() # 第二步加载用例到套件 loader = unittest.TestLoader() suite.addTest(loader.discover(CASE_DIR)) report_path = os.path.join(REPORT_DIR, "report.html") with open(report_path, "wb") as f: runner = HTMLTestRunner(stream=f, title="24期的测试报告", description="测试报告的描述信息。。。。。", tester="MuSen" ) # 运行测试套件 runner.run(suite) # 执行完代码之后,发送报告 send_email(report_path)
最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路
作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!