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 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
python使用arp欺骗伪造网关的方法
Apr 24 Python
python实现的希尔排序算法实例
Jul 01 Python
浅谈Python 对象内存占用
Jul 15 Python
Python实现定时任务
Feb 08 Python
Python常用算法学习基础教程
Apr 13 Python
Apache如何部署django项目
May 21 Python
Python 列表理解及使用方法
Oct 27 Python
简单实现python画圆功能
Jan 25 Python
python 美化输出信息的实例
Oct 15 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
Python正则表达式匹配数字和小数的方法
Jul 03 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文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
总结Python中逻辑运算符的使用
2015/05/13 Python
详解Python多线程
2016/11/14 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
转党组织关系介绍信
2014/01/08 职场文书
成考报名单位证明范本
2014/01/16 职场文书
大二学生学习个人自我评价
2014/01/19 职场文书
创先争优制度
2014/01/21 职场文书
员工培训邀请函
2014/02/02 职场文书
运动会入场解说词
2014/02/07 职场文书
cf搞笑广告词
2014/03/14 职场文书
保护母亲河倡议书
2014/04/14 职场文书
法制教育演讲稿
2014/09/10 职场文书
房屋过户委托书范本
2014/10/07 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
幼师辞职信怎么写
2015/02/27 职场文书