码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-07-19 21:28:12      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:erro   text   配置文件   附件   epo   写法   ssl   转换   ddr   

使用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 = 2474xxx@qq.com  #发件人邮箱
password = ryhnxdewssfybifj  #发件人邮箱密码
addressed_eamil = 24741xxx@qq.com #收件人邮箱

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(),然后执行

技术分享图片

 

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

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

标签:erro   text   配置文件   附件   epo   写法   ssl   转换   ddr   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!