Python实现自动发送测试报告邮件的示例代码

 更新时间:2023年07月30日 10:43:05   作者:测试架构师北凡  
SMTP也就是简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议,python的smtplib模块就提供了一种很方便的途径发送电子邮件,它对smtp协议进行了简单的封装,下面就来和大家简单聊聊吧

前言

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') #设置图片ID
msg.add_header('Content-Disposition', 'attachment', filename='test.xlsx')#为附件添加一个标题
msg.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', '中文标题')) #添加非ASCII字符时需指定编码
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的登录邮箱授权密码等提取出来放到配置文件来维护。

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")

测试报告都是测试用例运行完之后才生成,那么我们就可以把发邮件这一步放到测试报告生成之后:

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)

以上就是Python实现自动发送测试报告邮件的示例代码的详细内容,更多关于Python自动发送邮件的资料请关注脚本之家其它相关文章!

相关文章

  • python上selenium的弹框操作实现

    python上selenium的弹框操作实现

    这篇文章主要介绍了python上selenium的弹框操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python数组排序方法之sort、sorted和argsort详解

    python数组排序方法之sort、sorted和argsort详解

    这篇文章主要给大家介绍了关于python数组排序方法之sort、sorted和argsort的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Python 利用argparse模块实现脚本命令行参数解析

    Python 利用argparse模块实现脚本命令行参数解析

    这篇文章主要介绍了Python 利用argparse模块实现脚本命令行参数解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 一文带你探索Python中15个常见的魔术方法

    一文带你探索Python中15个常见的魔术方法

    在Python中,特殊方法(也称为魔术方法)是由Python解释器自动调用的,我们不需要手动调用它们,本文小编为大家整理了15个常见特殊方法的实现,希望对大家有所帮助
    2024-01-01
  • 分享一个pycharm专业版安装的永久使用方法

    分享一个pycharm专业版安装的永久使用方法

    这篇文章主要介绍了分享一个pycharm专业版安装的永久使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python机器学习NLP自然语言处理基本操作电影影评分析

    Python机器学习NLP自然语言处理基本操作电影影评分析

    本文是Python机器学习NLP自然语言处理系列文章,带大家开启一段学习自然语言处理 (NLP) 的旅程。本篇文章主要学习NLP自然语言处理基本操电影影评分析
    2021-09-09
  • Python获取网络时间戳的两种方法详解

    Python获取网络时间戳的两种方法详解

    在我们进行注册码的有效期验证时,通常使用获取网络时间的方式来进行比对。本文将介绍两种利用Python获取网络时间戳的方法,感兴趣的可以了解一下
    2022-01-01
  • Python中X[:,0]和X[:,1]的用法

    Python中X[:,0]和X[:,1]的用法

    这篇文章主要介绍了Python中X[:,0]和X[:,1]的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • 详解Python 函数如何重载?

    详解Python 函数如何重载?

    这篇文章主要介绍了Python函数重载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)

    基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)

    这篇文章主要介绍了基于python实现自动化办公学习笔记,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论