(五十)自动化测试高级应用之自动发邮件功能-发送HTML格式的邮箱

随笔记录方便自己和同路人查阅。

#------------------------------------------------我是可耻的分割线-------------------------------------------

  学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

#------------------------------------------------我是可耻的分割线-------------------------------------------

自动发邮件功能

自动发邮件功能也是自动化测试项目的重要需求之一。例如,我们想在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果。假设生成的测试报告与多人相关,每个人都去测试服务器查看就会比较麻烦,如果把这种主动的且不及时的查看变成被动且即使的查收,就方便多了。

SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于有源地址到目的地址传送邮件的规则,由它来控制新建的中转方式。

Pythonsmtplib模块提供了一种很方便的途径用来发送点击邮件。它对SMTP协议进行了简单的封装。我们可以使用SMTP对象的sendmail方法发送邮件,通过help()查看SMTP所提供的方法如下:

导入SMTP对象,通过help()查看对象的注释,从中找到sendmail()方法的使用说明。

connect(host,port)方法参数说明如下。

host:指定链接的邮箱服务器。

port:指定链接服务器的端口号。

login(user,password)方法参数说明如下。

user:登录邮箱用户用。

password:登录邮箱密码。

sendmail(from_addr,to_addrs,msg...)方法参数说明如下。

from_addr:邮件发送者地址。

to_addrs;字符串列表,邮件发送地址。

Msg:发送消息。

quit()方法:用于结束SMTP会话。

一般我们发邮件有两种方式。方式一:自己邮箱的Web页面(如mail.126.com),输入自己邮箱的用户名和密码登录,打开发邮件页面,填写对方的而邮箱地址及邮件标题与正文,完成后单击发送。方式二:下载安装邮箱客户端(如OutlookFoxmail等),填写邮箱账号、密码及邮箱服务器(如smtp.126.com),一般的邮箱客户端会默认几下这些信息,所以,这个过程只需填写一次,后面发邮件的过程与方法一相同。

而我们通过PythonSMTP对象发邮件则更像方式二,因为需要填写邮箱服务器。

当然,在具体发邮件时会涉及诸多需要,例如,邮件正文的格式、是否带图片、邮件是否需要添加附件(及多附件)、邮件是否需要同时向多人发送等。

发送HTML格式的邮箱

新建send_mail.py文件

# !/usr/bin/env python
# -*- coding: UTF-8 –*-
__author__ = 'Mr.Li'
import smtplib
from email.mime.text import MIMEText
from email.header import Header

#发送邮箱服务器
smtpserver = 'smtp.qq.com'
#发送邮箱用户/密码
user = [email protected]'
password = 'XXXXX'
#发送邮箱
sender = [email protected]'
#接收邮箱
receiver = [email protected]'
#发送邮件主题
subject = 'Python email test'

#编写HTML类型邮件正文
msg = MIMEText('<thml><h1>你好!</h1></html>','html','utf-8')
msg['Subject'] = Header(subject,'utf-8')

#链接发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()

运行后会报错:

这是因为这个异常的原因不是你的邮箱密码错误,而是因为你要在smtp第三方客户端登录,需要获得你qq邮箱的授权码,

也就是说,在password这里你应该填入授权码,而不是你的邮箱密码。那么授权码是什么呢(参考邮箱帮助中心),又如何获得授权码呢?

 http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

import smtplib
from email.mime.text import MIMEText
from email.header import Header

#发送邮箱服务器
smtpserver = 'smtp.qq.com'
#发送邮箱用户/密码
user = [email protected]'
password = 'mbnzfxlnmwbkbcfb'#这里不能填写邮箱密码而是填写邮箱授权码
#发送邮箱
sender = [email protected]'
#接收邮箱
receiver = '[email protected]'
#发送邮件主题
subject = 'Python email test'

#编写HTML类型邮件正文
msg = MIMEText('<thml><h1>你好!</h1></html>','html','utf-8')
msg['Subject'] = Header(subject,'utf-8')

#链接发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()

这样运行过后接收邮箱就收到了发送信息。

本例中,除SMTP模块外,我们还用到了email模块,它主要用来定义邮件的标题和正文:Header()方法用来定义邮件标题;MIMEText()用于定义邮件正文,参数为html格式的文本。登入receive邮箱,查看邮箱内容如下图:

猜你喜欢

转载自www.cnblogs.com/lirongyang/p/11595843.html