(五十)自动化测试高级应用之自动发邮件功能-发送HTML格式的邮箱
随笔记录方便自己和同路人查阅。
#------------------------------------------------我是可耻的分割线-------------------------------------------
学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。
#------------------------------------------------我是可耻的分割线-------------------------------------------
自动发邮件功能
自动发邮件功能也是自动化测试项目的重要需求之一。例如,我们想在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果。假设生成的测试报告与多人相关,每个人都去测试服务器查看就会比较麻烦,如果把这种主动的且不及时的查看变成被动且即使的查收,就方便多了。
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于有源地址到目的地址传送邮件的规则,由它来控制新建的中转方式。
Python的smtplib模块提供了一种很方便的途径用来发送点击邮件。它对SMTP协议进行了简单的封装。我们可以使用SMTP对象的sendmail方法发送邮件,通过help()查看SMTP所提供的方法如下:
导入SMTP对象,通过help()查看对象的注释,从中找到sendmail()方法的使用说明。
connect(host,port)方法参数说明如下。
host:指定链接的邮箱服务器。
port:指定链接服务器的端口号。
login(user,password)方法参数说明如下。
user:登录邮箱用户用。
password:登录邮箱密码。
sendmail(from_addr,to_addrs,msg...)方法参数说明如下。
from_addr:邮件发送者地址。
to_addrs;字符串列表,邮件发送地址。
Msg:发送消息。
quit()方法:用于结束SMTP会话。
一般我们发邮件有两种方式。方式一:自己邮箱的Web页面(如mail.126.com),输入自己邮箱的用户名和密码登录,打开发邮件页面,填写对方的而邮箱地址及邮件标题与正文,完成后单击发送。方式二:下载安装邮箱客户端(如Outlook、Foxmail等),填写邮箱账号、密码及邮箱服务器(如smtp.126.com),一般的邮箱客户端会默认几下这些信息,所以,这个过程只需填写一次,后面发邮件的过程与方法一相同。
而我们通过Python的SMTP对象发邮件则更像方式二,因为需要填写邮箱服务器。
当然,在具体发邮件时会涉及诸多需要,例如,邮件正文的格式、是否带图片、邮件是否需要添加附件(及多附件)、邮件是否需要同时向多人发送等。
发送HTML格式的邮箱
新建send_mail.py文件
# !/usr/bin/env python # -*- coding: UTF-8 –*- __author__ = 'Mr.Li' import smtplib from email.mime.text import MIMEText from email.header import Header #发送邮箱服务器 smtpserver = 'smtp.qq.com' #发送邮箱用户/密码 user = XXXXX@qq.com' password = 'XXXXX' #发送邮箱 sender = XXXXX@qq.com' #接收邮箱 receiver = XXXXX@qq.com' #发送邮件主题 subject = 'Python email test' #编写HTML类型邮件正文 msg = MIMEText('<thml><h1>你好!</h1></html>','html','utf-8') msg['Subject'] = Header(subject,'utf-8') #链接发送邮件 smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(user,password) smtp.sendmail(sender,receiver,msg.as_string()) smtp.quit()
运行后会报错:
这是因为这个异常的原因不是你的邮箱密码错误,而是因为你要在smtp第三方客户端登录,需要获得你qq邮箱的授权码,
也就是说,在password这里你应该填入授权码,而不是你的邮箱密码。那么授权码是什么呢(参考邮箱帮助中心),又如何获得授权码呢?
http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
import smtplib from email.mime.text import MIMEText from email.header import Header #发送邮箱服务器 smtpserver = 'smtp.qq.com' #发送邮箱用户/密码 user = xxxx@qq.com' password = 'mbnzfxlnmwbkbcfb'#这里不能填写邮箱密码而是填写邮箱授权码 #发送邮箱 sender = xxxx@qq.com' #接收邮箱 receiver = 'xxxx@qq.com' #发送邮件主题 subject = 'Python email test' #编写HTML类型邮件正文 msg = MIMEText('<thml><h1>你好!</h1></html>','html','utf-8') msg['Subject'] = Header(subject,'utf-8') #链接发送邮件 smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(user,password) smtp.sendmail(sender,receiver,msg.as_string()) smtp.quit()
这样运行过后接收邮箱就收到了发送信息。
本例中,除SMTP模块外,我们还用到了email模块,它主要用来定义邮件的标题和正文:Header()方法用来定义邮件标题;MIMEText()用于定义邮件正文,参数为html格式的文本。登入receive邮箱,查看邮箱内容如下图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异