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 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
改进Django中的表单的简单方法
Jul 17 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
Python实现求一个集合所有子集的示例
May 04 Python
python pygame实现2048游戏
Nov 20 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
python调用支付宝支付接口流程
Aug 15 Python
Python-opencv 双线性插值实例
Jan 17 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
Python程序慢的重要原因
Sep 04 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 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 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
Laravel 修改验证异常的响应格式实例代码详解
2020/05/25 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
python之import机制详解
2014/07/03 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
python怎么判断模块安装完成
2020/06/19 Python
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
建筑工程专业毕业生自荐信
2013/10/19 职场文书
初中物理教学反思
2014/01/14 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
群众路线个人整改措施
2014/10/24 职场文书
公司食堂管理制度
2015/08/05 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript
MySQL慢查询优化解决问题
2022/03/17 MySQL
Python 文字识别
2022/05/11 Python