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采用socket模拟TCP通讯的实现方法
Nov 19 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
在python中利用opencv简单做图片比对的方法
Jan 24 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
python之当你发现QTimer不能用时的解决方法
Jun 21 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
浅谈Python项目的服务器部署
Apr 25 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
PHP 危险函数全解析
2009/09/09 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
php不使用copy()函数复制文件的方法
2015/03/13 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
Sport-Thieme荷兰:购买体育用品
2019/08/25 全球购物
农民工工资支付承诺函
2014/03/31 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
2014年度考核工作总结
2014/12/24 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python