Python自动化测试进阶系列——自动发邮件功能

@[TOC]Python自动化测试进阶系列——自动发邮件功能
自动发邮件功能是自动化测试项目的重要功能之一。为了更好的理解python发邮件的实现原理,首先介绍下SMTP。SMTP(Simple Mail Transfer Protocol)协议属于TCP/IP协议簇,即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。python实现发邮件也是基于此基础上进行封装的。
通过Python发邮件需要用到smtplib和email模块,这两个模块都是python自带的,无需安装,可直接通过import导包进来。调用Smtplib模块的SMTP类中的方法来建立邮箱通信连接:连接邮箱服务器>登陆邮箱服务器>发送邮件到目标地址。而email模块主要是用来构建邮件主体:发件人、收件人、邮件主题、邮件正文、是否带图片、是否添加附件等等。下面分别详细介绍一下这两个模块的具体用法。

一、smtplib模块的常用类与方法

1、SMTP类

class smtplib.SMTP(host=“”,port=0,local_hostname=None,[timeout,]source_address=None):
SMTP类定义作为SMTP的构造函数,定义了一个SMTP客户端会话对象,功能是与smtp服务器建立连接,在连接成功后,就可以向服务器发送相关请求,比如登陆、校验、发送、退出等。
• host:参数为远程smtp主机地址;如:smtp.163.com
• port:为链接端口默认为25
• local_hostname:是将本地主机的FQDN(完整域名)发送 HELO/EHLO(标识用户身份)的指令
• timeout:为链接或尝试链接多少秒后超时
• source_address:绑定到具有多个网络接口的计算机中的某个特定源地址上或特定的TCP端口,它需要一个元组(主机,端口)

2、SMTP类方法

(1)SMTP.connect(host=‘localhost’,port=0) :链接到远程SMTP主机的方法,host为远程主机地址,port为远程主机smtp端口,默认为25,也可以直接使用host:port形式来表示:如:SMTP.connect(‘smtp.qq.com’,‘25’)
(2)SMTP.login(user,password):登陆需要认证的SMTP服务器,参数为用户名与密码,如SMTP.login(‘[email protected]’,‘123’)
SMTP.sendmail(from_addr,to_addrs,msg,mail_options=[],rcpt_options=[]):实现邮件的发送功能,参数from_addr为发件人,to_addrs为收件人,msg为邮件内容,如:SMTP.sendmail(‘[email protected]’,‘[email protected]’,body)。
(3)SMTP.starttls(keyfile=None,certfile=None):启用TLS安全传输模式,所有SMTP指令都将加密传输,如使用gmail的smtp服务时需要启动此项才能正常发送邮件。
(4)SMTP.quit():断开smtp服务器链接
(5)SMTP.set_debuglevel(level):设置调试输出级别,值为1,2或True,发送调试消息到服务器,参数值为1表示开启调试模式,参数值为0关闭调试模式,例:smtp.set_debuglevel(1)
(6)SMTP.send_message(msg,from_addr=None,to_addrs=None,mail_options=[],rcpt_options=[]):这是使用有email.message.Message对象表示的消息进行调用的便捷方法使用sendmail(),参数的含义与sendmail()相同,只有msg是一个Message对象;如果from_addr是None或者to_addrs是None,则send_message用从msg头部提取的地址填充那些参数,from设置为发件人自动,TO设置为to_addrs。

在进行python编程发邮件之前,首先要保证所测试的邮件服务器已开通POP3/IMAP/SMTP服务,并获取到授权码(连接邮箱服务器),QQ邮箱的服务器设置如下:

在这里插入图片描述

在这里插入图片描述
建立邮箱通信连接的代码如下:
注:本例用的是qq的smtp服务器。常用邮箱的smtp服务器地址:
新浪邮箱:smtp.sina.com,
搜狐邮箱:smtp.sohu.com,
qq邮箱:smtp.qq.com

smtp_server = "smtp.qq.com"  # 指定邮箱服务器
user = "155*****@qq.com"  # 发件人账号
password = "nfs****pgaej"  # 发件人授权码(第三方调用QQ邮箱服务器用的是授权码,而不是账号密码)
sender = "155****@qq.com"  # 发件人的邮件地址
receiver = [formataddr(('测试收件人1', '155***@qq.com'), charset='utf-8'),
            formataddr(('测试收件人2', "151***@qq.com"), charset='utf-8')]  # 构建收件人的邮件地址和显示名称
# 经测试QQ邮件服务商在显示邮件时,会把当前收件人名字自动替换为用户注册的名字,但是其他收件人名字的显示不受影响。
subject = "自动发邮件测试"  # 发送邮件主题

"""发送多种形式内容的邮件用MIMEMultipart()构造邮件对象"""
msg = MIMEMultipart("mixed")
msg["From"] = Header("python爱好者<%s>" % sender, "utf-8")  # 自定义发件人的显示名称,通过Header方法进行编码,兼容多种浏览器下的显示
msg['To'] = ",".join(receiver)  # 收件人地址用,隔开分别显示
msg["Subject"] = Header(subject, "utf-8")  # 自定义邮件标题
smtp = smtplib.SMTP()  # 创建一个smtp对象
smtp.connect(smtp_server)  # 连接邮箱服务器
smtp.login(user, password)  # 登录邮箱服务器
smtp.sendmail(sender, receiver, msg.as_string())  # 发送邮件
# msg.as_string()中as_string()是将msg(MIMEText或MIMEMultipart对象)变为str
smtp.quit()  # 断开邮箱服务器的连接

此段代码中用到的formataddr函数是构建邮件地址的,传入一个tuple,返回str,例如 a=formataddr((“user”,“[email protected]”)),运行a得到’user [email protected]’,Header函数用来定义邮件头信息,

二、email模块详解与用法

构造邮件主体主要是用到email模块下的mime模块。MIME英文全称Multipurpose Internet Mail Extensions,多用途互联网邮件扩展,作为一种新的扩展邮件格式,支持发送纯文本、HTML、音频、图片、附件等各种形式的邮件。更多MIME 知识见 https://docs.python.org/3/library/email.html。下面介绍几种常用的MIME类:

from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
f
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值