python3+requests库框架设计08-发送邮件
Posted 梦忆安凉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(),然后执行
整个框架系列就介绍到这里了
以上是关于python3+requests库框架设计08-发送邮件的主要内容,如果未能解决你的问题,请参考以下文章
基于Python+Requests库封装发送接口请求的工具类Python+Requests库做接口自动化框架设计系列多测师
基于Python+Requests库封装发送接口请求的工具类Python+Requests库做接口自动化框架设计系列多测师