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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
在windows下Python打印彩色字体的方法
May 15 Python
对python中使用requests模块参数编码的不同处理方法
May 18 Python
完美解决安装完tensorflow后pip无法使用的问题
Jun 11 Python
关于pandas的离散化,面元划分详解
Nov 22 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
Python类成员继承重写的实现
Sep 16 Python
Python常用断言函数实例汇总
Nov 30 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,不用COM,生成excel文件
2006/10/09 PHP
谈谈PHP语法(3)
2006/10/09 PHP
php导入导出excel实例
2013/10/25 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
chrome调试javascript详解
2015/10/21 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
Python socket实现简单聊天室
2018/04/01 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python实现批量注册网站用户的示例
2019/02/22 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
曼城官方网上商店:Manchester City
2019/09/10 全球购物
生物科学专业职业规划书范文
2014/02/11 职场文书
行政主管职责范本
2014/03/07 职场文书
出纳员岗位职责
2014/03/13 职场文书
委托书的写法
2014/09/16 职场文书
维稳承诺书
2015/01/20 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
python 命令行传参方法总结
2021/05/25 Python
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android