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']



python批量生成邮箱账号代码_python批量生成邮箱账号代码

# 发送邮件主题    t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())subject = '测试项目***接口自动化测试结果_' + t



python批量生成邮箱账号代码_程序控制发送文件到邮箱_02

# 发送邮箱服务器    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)


python批量生成邮箱账号代码_程序控制发送文件到邮箱_03

# 附件    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)



python批量生成邮箱账号代码_python批量生成邮箱账号代码_04

# 登录并发送邮件    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)

整体显示效果如下:



python批量生成邮箱账号代码_程序控制发送文件到邮箱_05

源码:# -*- 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)


这次就分享到这里啦,希望能给大家提供一些思路。