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 29 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
python SMTP实现发送带附件电子邮件
May 22 Python
Python操作json的方法实例分析
Dec 06 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
Python绘制频率分布直方图的示例
Jul 08 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
如何基于python操作json文件获取内容
Dec 24 Python
Python实现播放和录制声音的功能
Aug 12 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 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部分常见问题总结
2008/03/27 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
python文件和目录操作方法大全(含实例)
2014/03/12 Python
Python实现字典的key和values的交换
2015/08/04 Python
python实现批量文件重命名
2019/10/31 Python
Python新手如何理解循环加载模块
2020/05/29 Python
Python内置函数property()如何使用
2020/09/01 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
印度网上药店:1mg
2017/10/13 全球购物
初一家长会邀请函
2014/01/31 职场文书
《搭石》教学反思
2014/04/07 职场文书
门前三包责任书
2014/04/15 职场文书
法制宣传标语
2014/06/23 职场文书
医药销售自我评价200字
2014/09/11 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
丧事主持词
2015/07/02 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
反邪教学习心得体会
2016/01/15 职场文书
使用pytorch实现线性回归
2021/04/11 Python