python3+selenium框架设计10-发送邮件

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

 

以qq邮箱为例,在使用qq邮箱的SMTP服务时,须要在qq邮箱-帐户中先开启,而且生成受权码,而后密码那里填写受权码python

具体代码以下。数组

#!/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 = '2474xxx48@qq.com'  #发件人邮箱
password = 'kfsxmczzlinbbifj'  #发件人邮箱密码
addressed_eamil = '2474xxx48@qq.com' #收件人邮箱
 path = getcwd.get_cwd() file = os.path.join(path, 'report/xxxUI自动化测试报告.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+"xxxUI自动化测试报告"    # 邮件的主题,也能够说是标题

        # 邮件正文内容
        message.attach(MIMEText('附件为xxxUI自动化测试报告', '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", "", "xxxUI自动化测试报告.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展现内容能够跟代码中对照着来看,更容易理解一点并发

 

 

这样虽然实现了发邮件,可是也把邮件的收发人写死了,因此仍是要完善。经过读取配置文件来肯定收发人,在framework文件夹下Base_Page.py文件增长以下代码app

def config_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.config_get(i,'addressed') L.append(emails) sum += 1
        return L

而后修改配置文件框架

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

addressed是设置收件人的,以后随便往下加就好了。xxx = 邮箱就能够了。ui

这样谁发邮件,哪些人收到邮件,都是能够配置的。spa

将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 framework.Base_Page import BasePage import time rq = time.strftime('%Y%m%d', time.localtime(time.time()))#获取本地时间 转换成日期
my_mail = BasePage(driver=1) sender = my_mail.config_get('email','sender')  # 发件人邮箱帐号
password = my_mail.config_get('password','sender')  # 发件人邮箱密码
usernmae = my_mail.config_get('username','sender') #发件人姓名
users = my_mail.config_options('addressed')     #收件人
addressed_eamils = my_mail.get_addkey(users)  #收件人邮箱
 path = getcwd.get_cwd() file = os.path.join(path, 'report/xxxUI自动化测试报告.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 + "xxxUI自动化测试报告.html"    # 邮件的主题,也能够说是标题

        # 邮件正文内容
        message.attach(MIMEText('附件为xxxUI自动化测试报告.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", "", "xxxUI自动化测试报告.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文件开头加上from framework.my_email import mail,在最后加上mail(),而后执行

 

这样在执行完测试以后邮件就发送出去了,也能够在配置文件中加上开关,好比0发送邮件,1不发送邮件,方便调试代码。整个框架就写到这里,其实还有不少能够完善的。

相关文章
相关标签/搜索