​ SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

​ python发邮件主要需要两个模块:smtplibemail,这两个模块是python自带的库,import即可使用。smtplib主要负责发送邮件,即一个发送邮件的动作,如连接邮箱服务器,登录邮箱,发送邮件。email主要负责构造邮件,指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。

发送邮件

​ 涉及的部分参数说明:

  • 连接到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)

【python3.x】发送自动化测试报告邮件的更多相关文章

  1. python邮件发送自动化测试报告

    话不多说直接贴代码 # encoding: utf-8import smtplib #发送邮件模块from email.mime.text import MIMEText #邮件内容from emai ...

  2. 多测师讲解自动化 _邮件发送_高级讲师肖sir

    第一步.进入如下网址申请163邮箱. https://mail.163.com/ 第二步.注册完之后登录.点击如下图设置­点击POP3/SMTP/IMAP. 第三步.右侧点击客户端授权密码. 第四步. ...

  3. Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件

    1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_u ...

  4. Python + HTMLTestRunner + smtplib 完成测试报告生成及发送测试报告邮件

    一下代码是自己结合教材,并结合以往用到的实例编写的代码,可以做为参考 import smtplib from email.mime.text import MIMEText from email.mi ...

  5. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-发送测试报告邮件(19)

    给多个人发邮件时,可以传入邮箱列表 把多个收件人用分号隔开 # -*- coding: utf-8 -*-# @Time : 2020/2/15 17:02# @File : send_mail_19 ...

  6. Python3+smtplib+poplib+imaplib实现发送和收取邮件(以qq邮箱为例)

    一.说明 1.1 程序说明 (1)smtp是邮件发送协议:pop和imap都是邮件接收协议,两者的区别通常的说法是imap的操作会同步到邮箱服务器而pop不会,表现上我也不是很清楚 (2)本程序实现使 ...

  7. 最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

    今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程.以后各位只要着重如何编写 ...

  8. (转载)最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

    今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程.以后各位只要着重如何编写 ...

  9. python3+request接口自动化框架中自动发送邮件

    在上一篇中的自动化框架中没有放上自动发送测试结果到邮箱的功能,在这篇文章中在补一下,哈哈 1.上一篇的代码就不在一一介绍了,本篇只介绍发送邮件的功能代码 2.在public common 文件夹中创建 ...

随机推荐

  1. java.awt.event.MouseEvent鼠标事件的定义和使用 以及 Java Swing-JTextArea的使用

    最近发现一个CSDN大佬写的Java-Swing全部组件的介绍:Java Swing 图形界面开发(目录) JTextArea 文本区域.JTextArea 用来编辑多行的文本.JTextArea 除 ...

  2. Codeforces Round #696 (Div. 2) D. Cleaning (思维,前缀和)

    题意:有一堆石子,你每次可以选择相邻(就算两堆石子中间有很多空堆也不算)的两堆石子,使得两堆石子的个数同时\(-1\),你在刚开始的时候有一次交换相邻石子的机会,问你最后能否拿走所有石子. 题解:对于 ...

  3. Codeforces Round #642 (Div. 3) D. Constructing the Array (优先队列)

    题意:有一个长度为\(n\)元素均为\(0\)的序列,进行\(n\)次操作构造出一个新序列\(a\):每次选择最长的连续为\(0\)的区间\([l,r]\),使得第\(i\)次操作时,\(a[\fra ...

  4. 牛客53680 「金」点石成金 (dfs)

    题意:给你\(n\)组数,每组4个正整数\(a,b,c,d\),每组数有两个选择: ​ 1.增加\(a\)个财富,消耗\(b\)点魔法. ​ 2.回复\(c\)点魔法,减少\(a\)个财富. 求最后财 ...

  5. 踏上Revit二次开发之路 3 自己的工具按钮

    3 自己的工具按钮 上次的例子只能在"附加模块"→"外部工具"下运行,用作个人作品是没问题,如果打算搞个公司产品的话,估计BOSS是不会满意的.这次我来做一个直 ...

  6. Shell 编程练习

    将后缀名为 .txt 的文件改成 .log [root@k8s-master test]# touch localhost_2020-01-{02..26}.txt [root@k8s-master ...

  7. JVM ZeroTLAB 是什么意思呢?

    ZeroTLAB 是 JVM 的一个布尔型 Flag,意思是是否将新创建的 TLAB 内的所有字节归零. 默认:false 举例:-XX:+ZeroTLAB 当分配出来 TLAB 之后,根据 Zero ...

  8. Gym 101128F Landscaping(网络流)题解

    题意:n*m的地,从有高地和低地,从高地走到低地或者从低地走到高地花费a,把高地和低地互相改造一次花费b.现在要走遍每一行每一列,问最小花费 思路:超级源点连接所有低地,容量b:所有地向四周建边,容量 ...

  9. HaiYaaaa & 嗨呀

    HaiYaaaa & 嗨呀 海呀... 嗨呀... refs Uncle Roger https://www.youtube.com/results?search_query=uncle+Ro ...

  10. website captcha

    website captcha 验证码 hCaptcha hCaptcha通过询问对人类来说很容易且对机器来说很困难的简单问题,可以帮助您喜欢的Web服务阻止机器人,垃圾邮件和滥用行为. https: ...