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实现的登录和操作开心网脚本分享
Jul 09 Python
在windows下快速搭建web.py开发框架方法
Apr 22 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
numpy的文件存储.npy .npz 文件详解
Jul 09 Python
python学习之hook钩子的原理和使用
Oct 25 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
python 项目目录结构设置
Feb 14 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 Python
Python学习笔记之装饰器
Aug 06 Python
selenium.webdriver中add_argument方法常用参数表
Apr 08 Python
python中requests库+xpath+lxml简单使用
Apr 29 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
php适配器模式简单应用示例
2019/10/23 PHP
JS动态调用方法名示例介绍
2013/12/18 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
对python中Json与object转化的方法详解
2018/12/31 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
python用for循环求和的方法总结
2019/07/08 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
你懂得怎么写自荐信吗?
2013/12/27 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
2014年化验室工作总结
2014/11/21 职场文书
道歉情书大全
2015/05/12 职场文书
人民检察院起诉书
2015/05/20 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
校园开放日新闻稿
2015/07/17 职场文书
企业团队精神心得体会
2016/01/19 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书