python3+requests库框架设计08-发送邮件

使用python3的email模块和smtplib模块可以实现发送邮件的动能。email模块用来生成email,smtplib模块用来发送邮件,接下来看如何在生成测试报告之后,自动将邮件发给项目组的人,在Common文件夹下新建my_email.py文件,项目结构如下。

#!/usr/bin/python3

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
import getcwd
import os
from Logs.log import log1
import time

rq = time.strftime(‘%Y%m%d‘, time.localtime(time.time()))#获取本地时间 转换成日期
sender = ‘[email protected]‘  #发件人邮箱
password = ‘ryhnxdewssfybifj‘  #发件人邮箱密码
addressed_eamil = ‘[email protected]‘ #收件人邮箱

path = getcwd.get_cwd()
file = os.path.join(path, ‘report/xxx接口自动化测试报告.html‘)#测试报告地址

def mail():
    try:
        # 创建一个带附件的实例
        message = MIMEMultipart()
        message[‘From‘]=formataddr([‘发件人姓名‘,sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        log1.info(‘发件人邮箱:%s‘ % sender)
        message[‘To‘]= formataddr([‘收件人姓名‘,addressed_eamil])    # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        log1.info(‘收件人邮箱:%s‘ % addressed_eamil)
        message[‘Subject‘]=rq+"xxx接口自动化测试报告"    # 邮件的主题,也可以说是标题

        # 邮件正文内容
        message.attach(MIMEText(‘附件为xxx接口自动化测试报告‘, ‘plain‘, ‘utf-8‘))

        # 构造附件1
        att1 = MIMEText(open(file, ‘rb‘).read(), ‘base64‘, ‘utf-8‘)
        log1.info(‘读取附件‘)
        att1["Content-Type"] = ‘application/octet-stream‘
        # filename是附件名,附件名称为中文时的写法
        att1.add_header("Content-Disposition", "attachment", filename=("gbk", "", "xxx接口自动化测试报告.html"))
        # 附件名称非中文时的写法
        # att["Content-Disposition"] = ‘attachment; filename="test.html")‘
        message.attach(att1)
        log1.info(‘添加附件‘)

        server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,一般端口是25
        log1.info(‘连接QQ邮箱smtp服务‘)
        server.login(sender,password)  # 括号中对应的是发件人邮箱账号、邮箱密码
        log1.info(‘连接成功‘)
        server.sendmail(sender, addressed_eamil, message.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
        log1.info("邮件发送成功")
    except Exception:
        log1.error("邮件发送失败",exc_info=1)

mail()

收件人和发件人可以都填自己的QQ邮箱,from是发件人那一栏的展示。to是收件人的展示。如果要显示多个收件人,需要使用‘,’.join(邮箱数组)。最下面sendmail中第二个传收件人邮箱,如果要发给多个人,传数组。

email展示内容可以跟代码中对照着来看,更容易理解一点

以qq邮箱为例,在使用qq邮箱的SMTP服务时,需要在qq邮箱-账户中先开启,并且生成授权码,然后密码那里填写授权码

这样虽然实现了发邮件,但是也把邮件的收发人写死了,所以还是要完善。通过读取配置文件来确定收发人,在Common文件夹下Base_test.py文件增加如下代码

    def confige_options(self,section):
        ‘‘‘读取配置文件某section下所有键‘‘‘
        config = configparser.ConfigParser()
        config.read(config_path,encoding="utf-8-sig")
        username = config.options(section)
        return username

    def get_addkey(self,user):
        ‘‘‘遍历获得配置文件收件人email‘‘‘
        sum = 0
        L = []
        for i in user:
            if sum < len(user):
                emails = self.confige_get(‘addressed‘, i)
                L.append(emails)
                sum += 1
        return L

然后修改配置文件

sender是设置发件人的,username是发件人的姓名,email是发件人邮箱,password是邮箱密码

addressed是设置收件人的,之后随便往下加就行了。xxx = 邮箱就可以了。

这样谁发邮件,哪些人收到邮件,都是可以配置的。

将my_email.py文件代码修改成如下

#!/usr/bin/python3

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
import getcwd
import os
from Logs.log import log1
from Common.Base_test import webrequests
import time

rq = time.strftime(‘%Y%m%d‘, time.localtime(time.time()))#获取本地时间 转换成日期
my_mail = webrequests()
sender = my_mail.confige_get(‘sender‘,‘email‘)  # 发件人邮箱账号
password = my_mail.confige_get(‘sender‘,‘password‘)  # 发件人邮箱密码
usernmae = my_mail.confige_get(‘sender‘,‘username‘) #发件人姓名
users = my_mail.confige_options(‘addressed‘)     #收件人
addressed_eamils = my_mail.get_addkey(users)  #收件人邮箱

path = getcwd.get_cwd()
file = os.path.join(path, ‘report/xxx接口自动化测试报告.html‘)

def mail():
    try:
        # 创建一个带附件的实例
        message = MIMEMultipart()
        message[‘From‘]=formataddr([usernmae,sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        log1.info(‘发件人姓名:%s‘ % usernmae)
        log1.info(‘发件人邮箱:%s‘ % sender)
        message[‘To‘]=‘;‘.join(addressed_eamils)    # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        log1.info(‘收件人邮箱:‘ + ‘;‘.join(addressed_eamils))
        message[‘Subject‘]=rq + "xxx接口自动化测试报告.html"    # 邮件的主题,也可以说是标题

        # 邮件正文内容
        message.attach(MIMEText(‘附件为xxx接口自动化测试报告.html‘, ‘plain‘, ‘utf-8‘))

        # 构造附件1,传送当前目录下的 test.txt 文件
        att1 = MIMEText(open(file, ‘rb‘).read(), ‘base64‘, ‘utf-8‘)
        log1.info(‘读取附件‘)
        att1["Content-Type"] = ‘application/octet-stream‘
        # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
        att1.add_header("Content-Disposition", "attachment", filename=("gbk", "", "xxx接口自动化测试报告.html"))
        # 附件名称非中文时的写法
        # att["Content-Disposition"] = ‘attachment; filename="test.html")‘
        message.attach(att1)
        log1.info(‘添加附件‘)

        server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
        log1.info(‘连接QQ邮箱smtp服务‘)
        server.login(sender,password)  # 括号中对应的是发件人邮箱账号、邮箱密码
        log1.info(‘连接成功‘)
        server.sendmail(sender, addressed_eamils, message.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
        log1.info("邮件发送成功")
    except Exception:
        log1.error("邮件发送失败",exc_info=1)

在entrance.py文件开头加上import Common.my_email,在最后加上Common.my_email.mail(),然后执行

整个框架系列就介绍到这里了

原文地址:https://www.cnblogs.com/myal/p/9337588.html

时间: 2024-08-26 09:45:38

python3+requests库框架设计08-发送邮件的相关文章

python3+requests库框架设计07-HTMLTestRunner

HTMLTestRunner是unittest模块下的一个拓展,原生的生成报告样式比较丑,GitHub上有大佬优化过后的版本:GitHub地址.下载之后解压应该是这样的 我们需要使用的是HTMLTestRunnerCN.py和EN.py 这两个.一个生成的是中文报告,一个生成的是英文报告.想用哪个版本的就把对应版本的.py文件复制到pytho3安装目录下的Lib文件夹下.能import进来相应的文件就可以了.最下面两个test开头的.py文件是用来测试的.可以直接运行看下生成的报告是什么样子的

python3 requests库文件上传与下载

在接口测试学习过程中,遇到了利用requests库进行文件下载和上传的问题.同样,在真正的测试过程中,我们不可避免的会遇到上传和下载的测试. 文件上传: url = ztx.host+'upload/uploadFile?CSRFToken='+self.getCSRFToken()#上传文件的接口地址 header = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko', '

Python3简易接口自动化测试框架设计与实现 实例2

目录 1.开发环境 2.用到的模块 3.框架设计 ?3.1.流程 3.2.项目结构 5.日志打印 6.接口请求类封装 7.Excel数据读取 7.1.读取配置文件 7.1.编写Excel操作类 8.用例组装 9.用例运行结果校验 10.运行用例 11 .小结 1.开发环境 操作系统:Ubuntu18 开发工具:IDEA+PyCharm插件 Python版本:3.6 2.用到的模块 requests:用于发送请求 xlrd:操作Excel,组织测试用例 smtplib,email:发送测试报告 l

Python3网络爬虫——三、Requests库的基本使用

一.什么是Requests Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开元协议的HTTP库.它比urllib更加的方便,可以节约我们大量的工作完全满足HTTP测试需求.简单来讲,即Python实现的简单易用的HTTP库. 二.Requests库的安装 如果是初学者,建议使用原生Python3进行安装. 1 >> pip3 install requests 如果有一定的Python基础(会基本语法即可),使用anaconda进行安装更加方便,

python3添加requests库

1.资源下载 https://codeload.github.com/psf/requests/zip/master https://www.python.org/ https://files.pythonhosted.org/packages/41/b6/4f0cefba47656583217acd6cd797bc2db1fede0d53090fdc28ad2c8e0716/certifi-2018.10.15.tar.gz https://files.pythonhosted.org/pac

requests库详解 --Python3

本文介绍了requests库的基本使用,希望对大家有所帮助. requests库官方文档:https://2.python-requests.org/en/master/ 一.请求: 1.GET请求 coding:utf8 import requests response = requests.get('http://www.httpbin.org/get') print(response.text) 2.POST请求 # coding:utf8 import requests data = {

Linux设备驱动框架设计

引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码.能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Linux内核提供了一套易于扩展和维护的设备驱动框架.Linux内核本身提供一套设备驱动模型,此模型提供了Linux内核对设备的一般性抽象描述,包括设备的电源管理.对象生命周期管理.用户空间呈现等等.在设备模型的帮助下,设备驱动开发工程师从设备的一般性抽象中解脱出来.但是每个设备的具体功能实现还需要大量

使用 ACE 库框架在 UNIX 中开发高性能并发应用

使用 ACE 库框架在 UNIX 中开发高性能并发应用来源:developerWorks 中国 作者:Arpan Sen ACE 开放源码工具包可以帮助开发人员创建健壮的可移植多线程应用程序.本文讨论创建使用 ACE 线程的应用程序的一些方法.Adaptive Communication Environment (ACE) 是一个高性能.开放源码.面向对象的框架和 C++ 类库,它有助于简化网络应用程序的开发.ACE 工具包包括一个操作系统层和一个封装网络 API 的 C++ 外观(facade

JS读书笔记:《JavaScript框架设计》——第12章 异步处理

一.何为异步   执行任务的过程可以被分为发起和执行两个部分. 同步执行模式:任务发起后必须等待直到任务执行完成并返回结果后,才会执行下一个任务. 异步执行模式:任务发起后不等待任务执行完成,而是马上执行下一个任务,当任务执行完成时则会收到通知. 面对IO操作频繁的场景,异步执行模式可在同等的硬件资源条件下提供更大的并发处理能力,也就是更大的吞吐量. 但由于异步执行模式打破人们固有的思维方式,并且任务的发起和任务的执行是分离的,从而提高编程的复杂度. 多线程.多进程均可实现异步模式. 二.从回调