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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
获取python文件扩展名和文件名方法
Feb 02 Python
Tensorflow 查看变量的值方法
Jun 14 Python
python实现合并两个排序的链表
Mar 03 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
如何在Python中实现goto语句的方法
May 18 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
python try...finally...的实现方法
Nov 25 Python
Python爬虫中Selenium实现文件上传
Dec 04 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 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/04/09 魔兽争霸
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
用Python进行简单图像识别(验证码)
2018/01/19 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
如何手工释放资源
2013/12/15 面试题
财务管理专业自荐信范文
2013/12/24 职场文书
八一建军节演讲稿
2014/09/10 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
营销计划书范文
2015/01/17 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
简爱读书笔记
2015/06/26 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang