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实现包含min函数的栈
Apr 29 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
Python Flask框架扩展操作示例
May 03 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
Python PIL库图片灰化处理
Apr 07 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
教你使用Pandas直接核算Excel中快递费用
May 12 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/01/12 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
ext jquery 简单比较
2010/04/07 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
Python中Collection的使用小技巧
2014/08/18 Python
Python实现方便使用的级联进度信息实例
2015/05/05 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
Python如何读取文件中图片格式
2020/01/13 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
小组合作学习反思
2014/02/18 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
学校捐书倡议书
2015/04/27 职场文书
入党自传范文2015
2015/06/26 职场文书
2019秋季运动会口号
2019/06/25 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang