设计自动化框架时,希望可以直接将运行后的html报告发送给自己,需要用到smtplib模块和email模块,所以就写个小的教程吧。
email模块:负责构建邮件
stmplib模块:负责发送邮件
一、配置163邮箱
自动发送邮件,我们需要一个邮件服务器来支持邮件的发送,所以我们先看下如何设置163邮箱为stmp服务器。
1、登录163邮箱后,选择设置下的“POP3/SMTP/IMAP”
2、进入设置界面之后,选择开始POP3/SMTP服务,因为我自己已经开启了该服务,所以我截图的界面和你们没开启的界面不一样。不用在意这个差别,直接点击“开启”就行了。开启之后,会要求验证你的短信,之后会生成一个字符串的密钥,这个密钥一定要保存好!!!获取到密钥之后我们第一步就结束了,接下来来看命令具体应该如何来写
二、smtplib模块和email模块部分命令
smtplib:
connect(host, port):链接smtp服务器,第一个参数是服务器地址,第二个参数时服务器端口
login(user,password):登录smtp服务器,第一个参数是登录邮箱用户名,第二个参数是登陆密码,注意此处密码不是指邮箱的真是登录密码,而是在第一步中获取到的那个密钥
sendmail(from_addr, to_addr, msg):第一个参数是发送方的邮箱地址,第二个参数是接收方的邮件地址,第三个参数是邮件的正文
quit():结束当前会话
close():关闭和SMTP服务器的连接
email:
MIMEText(邮件正文,邮件内容格式,编码格式):创建邮件正文的类
发送邮件要遵循邮件发送的规则,即需要有发件人、收件人以及邮件标题,所以我们需要对MIMEText类所创建的对象依次添加内容From、To、Subject
三、发送文本邮件
import smtplib
from email.mime.text import MIMEText
# 发送纯文本格式的邮件,邮件正文一定要是有意义的内容,不然会被163服务器识别为垃圾邮件,无法发送
msg = MIMEText('dear wong,this is the work mail ,if you getted please receive now!!!','plain','utf-8')
#发送邮箱地址
sender = '发件人邮箱'
#邮箱授权码,非登陆密码
password = '授权码'
#收件箱地址
receiver = '收件人邮箱'
#smtp服务器
smtp_server = 'smtp.163.com'
#发送邮箱地址
msg['From'] = sender
#收件箱地址
msg['To'] = receiver
#主题,主题也必须是有意义的内容,否则同样会被识别为垃圾邮件,无法发送
msg['Subject'] = 'new dream reject email'
server = smtplib.SMTP(smtp_server,25) # SMTP协议默认端口是25
server.login(sender,password) #ogin()方法用来登录SMTP服务器
server.set_debuglevel(1) #打印出和SMTP服务器交互的所有信息。
server.sendmail(sender,receiver,msg.as_string()) #msg.as_string()把MIMEText对象变成str server.quit()
发送结果如图
四、发送HTML格式邮件
其实发送html格式的邮件和发送纯文本的格式区别不是很大,只需要修改MIMEText实例化时的入参,第一个参数改为html的源码格式内容,第二个参数改为html即可
因为我自己是用来发送自动化生成的html报告,所以例子就直接写的是怎么讲HTMLTestRunner生成的html报告写入到邮件里面
import smtplib
import time
import unittest
from HTMLTestRunner import HTMLTestRunner
from email.mime.text import MIMEText
class NewDream(unittest.TestCase):
def test_new(self):
self.assertTrue(True)
def test_dream(self):
self.assertEqual(1, 1)
if __name__ == '__main__':
# 创建testsuite 测试集合对象
suite = unittest.TestSuite()
# 完成测试用例的添加
# addTest(case类名('test开头的测试方法'))
suite.addTest(NewDream('test_new'))
suite.addTest(NewDream('test_dream'))
# 创建文件流对象
file_name = time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime(time.time())) # 根据时间生成了文件名 testfile.txt
file = open(file_name+".html", "w+", encoding='utf-8')
# 实例化HTMLTestRunner对象
runer = HTMLTestRunner(stream=file,
title=u"测试登录网页功能的报告生成",
description=u"验证下HTMLTestRunner模块的具体使用"
)
runer.run(suite)
file.seek(0, 0)
html_content = file.read()
print("这是文件内容:%s" % html_content)
# 发送纯文本格式的邮件
msg = MIMEText("dear sir,\nthis is the test report" + html_content, 'html', 'utf-8')
# 发送邮箱地址
sender = '发件人邮箱地址'
# 邮箱授权码,非登陆密码
password = '授权码'
# 收件箱地址
receiver = '收件人邮箱地址'
# smtp服务器
smtp_server = 'smtp.163.com'
# 发送邮箱地址
msg['From'] = sender
# 收件箱地址
msg['To'] = receiver
# 主题,需要是一些有实际意义的内容
msg['Subject'] = 'the auto_test report'
server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25
server.login(sender, password) # ogin()方法用来登录SMTP服务器
server.set_debuglevel(1) # 打印出和SMTP服务器交互的所有信息。
server.sendmail(sender, receiver, msg.as_string()) # msg.as_string()把MIMEText对象变成str
server.quit()
实际效果
写在最后,本文只是一些非常简单的模块命令使用,顶多帮你实现邮件的发送,如果相对模块有更深入的学习,建议直接阅读官方文档