01
自动发邮件功能-发送HTML格式的邮件
来自燕燕老师python应用的顶级干货讲解,码住!!
jmeter+ant 自动生成html报告并发送邮件,发现接收人不能超过5人,html报告不能直接展现在邮件中。
这里给大家推荐一个好的方法:python SMTP发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
实例
以下执行实例需要你本机已安装了支持 SMTP 的服务,如:sendmail。推荐使用Spyder,直接运行有可以。
以下是一个使用 Python 发送邮件简单的实例:
# 发送邮箱sender = 'hyxx-zdhcs@thunisoft.com' # 接收邮箱receiver = ['ffdd@163.com','douyy@thunisoft.com']
# 发送邮件主题 t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())subject = '测试项目***接口自动化测试结果_' + t
# 发送邮箱服务器 smtpserver = 'smtp.thunisoft.com' # 发送邮箱用户/密码 username = 'hyxx-zdhcs' password = 'password****' # 读取html文件内容 此html文件内容作为正文展示到邮件中,同时也会放到附件中file='E:\\tool\\apache-jmeter-5.3\\apache-jmeter-5.3\\demo\\report1\\html\\TestReport.html' f = open(file, 'rb') mail_body = f.read() f.close() # 附件中的图片 images1 ="E:/tool/apache-jmeter-5.3/apache-jmeter-5.3/demo/report1/html/expand.png" images2 ="E:/tool/apache-jmeter-5.3/apache-jmeter-5.3/demo/report1/html/collapse.png" # 组装邮件内容和标题 msgRoot = MIMEMultipart('related') # 发送邮箱 msgRoot['From'] = Header(sender) # 收件人 msgRoot['To'] = ';'.join(receiver) # 发送邮件主题 msgRoot['Subject'] = Header(subject) msgAlternative = MIMEMultipart('alternative') # 邮件内容 smail="""
大家好:
下面是自动化测试结果
""" msgAlternative.attach(MIMEText(bytes(smail, encoding = "utf8")+mail_body, 'html', 'utf-8'))msgRoot.attach(msgAlternative)
# 附件 imageApart = MIMEImage(open(images1, 'rb').read(), images1.split('.')[-1]) imageApart.add_header('Content-Disposition', 'attachment', filename="expand.png") imageApart1 = MIMEImage(open(images2, 'rb').read(), images2.split('.')[-1]) imageApart1.add_header('Content-Disposition', 'attachment', filename="collapse.png") # 构造附件,传送指定目录下的html文件 att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att1["Content-Disposition"] = 'attachment; filename="TestReport.html"' msgRoot.attach(imageApart) msgRoot.attach(imageApart1)msgRoot.attach(att1)
# 登录并发送邮件 try: smtp = smtplib.SMTP() smtp.connect(smtpserver, 25) smtp.login(username, password) smtp.sendmail(sender, receiver, msgRoot.as_string()) except: print("邮件发送失败!") else: print("邮件发送成功!") finally: smtp.quit()#正文显示的html文件file='E:\\tool\\apache-jmeter-5.3\\apache-jmeter-5.3\\demo\\report1\\html\\TestReport.html'# 发送html内容邮件send_mail_html(file)
整体显示效果如下:
源码:# -*- coding: utf-8 -*-"""Created on Fri Jul 24 14:53:36 2020@author: dd"""# 发送html内容的邮件import smtplib, timefrom email.mime.text import MIMETextfrom email.header import Headerfrom email.mime.multipart import MIMEMultipartfrom email.mime.image import MIMEImagedef send_mail_html(file): # 发送邮箱 sender = 'hyxx-zdhcs@thunisoft.com' # 接收邮箱 receiver = ['接收邮箱1@thunisoft.com','接收邮箱2@thunisoft.com'] # 发送邮件主题 t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) subject = 'y项目接口自动化测试结果_' + t # 发送邮箱服务器 smtpserver = 'smtp.thunisoft.com' # 发送邮箱用户/密码 username = 'hyxx-zdhcs' password = 'password****' # 读取html文件内容 f = open(file, 'rb') mail_body = f.read() f.close() images1 ="E:\\tool\\apache-jmeter-5.3\\apache-jmeter-5.3\\demo\\report1\\html\\expand.png" images2 ="E:\\tool\\apache-jmeter-5.3\\apache-jmeter-5.3\\demo\\report1\\html\\collapse.png" # 组装邮件内容和标题,中文需参数‘utf-8’,单字节字符不需要 msgRoot = MIMEMultipart('related') msgRoot['From'] = Header(sender) #收件人 msgRoot['To'] = ';'.join(receiver) msgRoot['Subject'] = Header(subject) msgAlternative = MIMEMultipart('alternative') smail="""
大家好:
关键字服务-接口:新增的异常用例,返回值有问题,已经跟开发说过,目前开发还没有时间改
代码服务-接口:增量同步接口报错,已知错误,待开发修改。
新增加审计日志-接口
""" msgAlternative.attach(MIMEText(bytes(smail, encoding = "utf8")+mail_body, 'html', 'utf-8')) msgRoot.attach(msgAlternative) # 附件 imageApart = MIMEImage(open(images1, 'rb').read(), images1.split('.')[-1]) imageApart.add_header('Content-Disposition', 'attachment', filename="expand.png") imageApart1 = MIMEImage(open(images2, 'rb').read(), images2.split('.')[-1]) imageApart1.add_header('Content-Disposition', 'attachment', filename="collapse.png") # 构造附件1,传送当前目录下的html文件 att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写文件名称,邮件中会显示相应的文件名称 att1["Content-Disposition"] = 'attachment; filename="TestReport.html"' msgRoot.attach(imageApart) msgRoot.attach(imageApart1) msgRoot.attach(att1) # 登录并发送邮件 try: smtp = smtplib.SMTP() smtp.connect(smtpserver, 25) smtp.login(username, password) smtp.sendmail(sender, receiver, msgRoot.as_string()) except: print("邮件发送失败!") else: print("邮件发送成功!") finally: smtp.quit()#正文显示的html文件file='E:\\tool\\apache-jmeter-5.3\\apache-jmeter-5.3\\demo\\report1\\html\\TestReport.html'# 发送html内容邮件send_mail_html(file)
这次就分享到这里啦,希望能给大家提供一些思路。