Python发送邮件封装实现过程详解


Posted in Python onMay 09, 2020

引言

在做接口测试的时候,我们不仅需要将测试结果以报告的形式展示,还需要将测试结果以邮件的形式发送到需要知道的人手中。那么如何发送邮件呢?

邮件发送方式

测试结果以邮件形式发送的方式有两种:

第一种:手动统计结果数据及报告,用邮件客户端或web版形式发送,比如:用QQ邮箱,foxmail邮箱...

第二种:使用脚本发送,比如:利用python内置对SMTP协议的支持,发送邮件。

介绍一下:

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件;Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件;Smtplib是关于 SMTP(简单邮件传输协议)的操作模块,在发送邮件的过程中,起到服务器之间互相通信的作用;Email是用来设置服务器之间通信的信息,包括信息头、信息主体等等;用脚本发邮件时,需要先打开自己邮箱的 SMTP 功能,各家邮箱的设置方法不同,可自行百度;

发邮件流程图剖析:

Python发送邮件封装实现过程详解

脚本实现发送邮件

这里我只介绍python脚本发送邮件,具体参考下面代码,关键部分已经注释:

# -*- coding: utf-8 -*-
'''
@author: Leo
@software: pycharm
@file: 111.py
@time: 2020/4/26 0026 1:13
@Desc:
'''
__author__ = 'Leo'
# -*- coding: utf-8 -*-
'''
@author: Leo
@software: pycharm
@file: send_email.py
@time: 2020/4/25 0025 22:02
@Desc:
 
'''
__author__ = 'Leo'
# 导入发送邮件模块:smtplib
import smtplib
# 导入构造邮件模块:MIMEText
from email.mime.text import MIMEText
class SendEmail(object):
  """
  发送邮件模块
  """
  def __init__(self):
    """
    初始化邮件配置服务
    """
    self.send_user = '###'
    self.mail_host = 'smtp.163.com'
    self.password = '###'
 
  def send_mail(self,user_lists,subject,content):
    """
    执行发送邮件
    """
    user = "发件人名称" + "<" + self.send_user + ">"
    message = MIMEText(content,_subtype="plain",_charset="utf8")
    message['Subject'] = subject
    message['From'] = user
    message['To'] = ";".join(user_lists)
    try:
      server = smtplib.SMTP()
      server.connect(self.mail_host)
      server.login(self.send_user,self.password)
      # as_string将MIMEText对象转成str
      server.sendmail(user,user_lists,message.as_string())
      server.close()
      print("邮件发送成功".center(60,'='))
 
    except:
      print("邮件发送失败".center(60,'='))
      raise
  def send_content(self,data):
    """
    发送邮件内容
    """
    pass_cases_nums = int(len(data['pass_cases']))
    print("用例执行成功数:%s"%pass_cases_nums)
    fail_cases_nums = int(len(data['fail_cases']))
    print("用例执行失败数:%s"%fail_cases_nums)
    not_execute_nums = int(len(data['not_execute_cases']))
    print("用例未执行数:%s" % fail_cases_nums)
    execute_num = float(pass_cases_nums + fail_cases_nums)
    total_cases = float(pass_cases_nums + fail_cases_nums + not_execute_nums)
    pass_ratio = "%.2f%%" % (pass_cases_nums / total_cases * 100)
    fail_ratio = "%.2f%%" % (fail_cases_nums / total_cases * 100)
 
    user_lists = ['###']
    subject = "【接口自动化测试用例执行统计】"
    content = "一共 %f 个用例, 执行了 %f 个用例,未执行 %f 个用例;成功 %f 个,通过率为 %s;失败 %f 个,失败率为 %s" % (total_cases, execute_num, not_execute_nums, pass_cases_nums, pass_ratio, fail_cases_nums, fail_ratio)
 
    self.send_mail(user_lists, subject, content)
if __name__ == '__main__':
  sm = SendEmail()
  sm.send_content({'pass_cases':[1, 3, 5],'fail_cases':[2, 4, 6],'not_execute_cases':[1, 2, 3]})

运行程序:

Python发送邮件封装实现过程详解

结果:

Python发送邮件封装实现过程详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中关于日期时间处理的问答集锦
Mar 08 Python
python爬虫常用的模块分析
Aug 29 Python
python获取局域网占带宽最大3个ip的方法
Jul 09 Python
Python编写一个优美的下载器
Apr 15 Python
Python实现求解一元二次方程的方法示例
Jun 20 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
简单了解Python3 bytes和str类型的区别和联系
Dec 19 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
基于Python实现天天酷跑功能
Jan 06 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 13 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 #Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 #Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 #Python
Python接口测试数据库封装实现原理
May 09 #Python
解决pycharm安装第三方库失败的问题
May 09 #Python
Python Json数据文件操作原理解析
May 09 #Python
利用Python如何实时检测自身内存占用
May 09 #Python
You might like
使用PHP实现二分查找算法代码分享
2011/06/24 PHP
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
JS实现拖拽元素时与另一元素碰撞检测
2020/08/27 Javascript
用js实现放大镜效果
2020/10/28 Javascript
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
python实现代码统计程序
2019/09/19 Python
学Python 3的理由和必要性
2019/11/19 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
好的自荐信的要求
2013/10/30 职场文书
班组长竞聘书
2014/03/31 职场文书
钱学森观后感
2015/06/04 职场文书
感恩教师节主题班会
2015/08/12 职场文书
python数据处理之Pandas类型转换
2022/04/28 Python