在学习python+selenium框架中,涉及到使用python将测试报告邮件发送,下面学习学习python的邮件模块
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000 廖雪峰老师文章
http://www.runoob.com/python/python-email.html 菜鸟教程
基础知识:SMTP 简单的邮件传输协议,可发送纯文本邮件、HTML邮件以及带附件的邮件,python对SMTP的支持包括有有smtplib和email模块,email
负责构造邮件,smtplib
负责发送邮件。
构造一个邮件对象就是一个Messag
对象,如果构造一个MIMEText
对象,就表示一个文本邮件对象,如果构造一个MIMEImage
对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart
对象,而MIMEBase
可以表示任何对象
下面就使用我自己的qq邮箱给其他邮箱发邮件
1、首先要在qq邮箱申请一个授权码,百度可以得到申请方法
第一个可以成功发送邮件的程序(使用qq邮箱发送文本文档)
import smtplib
from email.mime.text import MIMEText #发送文本文件
from email.utils import formataddr
# 邮箱地址和口令
sender_addr= '14xxxxx@qq.com' #发件人邮箱
password = 'xxxxxxx' #这里的密码是申请的授权码
#SMTP服务器地址:
stmp_server ='smtp.qq.com' #qq邮箱SMTP服务器地址
#收件人地址
receive_addr = '1404482005@qq.com'
#创建邮件对象,这里是文本文档邮件对象,三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
msg = MIMEText('send with file..','plain','utf-8')
msg['From'] = formataddr(['111111',sender_addr])#‘111’发件人邮件昵称
msg['To'] = formataddr(['j111',receive_addr])#收件人邮件昵称
msg['Subject'] = "python" #邮件title、主题
try:
server = smtplib.SMTP_SSL(stmp_server,465) #qq邮箱SMTP服务器ssl端口号465
server.set_debuglevel(1) #就可以打印出和SMTP服务器交互的所有信息
server.login(sender_addr,password) #登录 server.sendmail(sender_addr,receive_addr,msg.as_string()) #发邮件,msg.as_string()把文本内容转化为string
print('邮箱链接成功')
server.quit()
except smtplib.SMTPException as e: #异常SMTPException
print("邮箱链接失败,链接失败原因,%s"%e)
在第一次中遇到一个问题,程序运行可是一直没有发出邮件并结束,smtplib.SMTP_SSL(stmp_server,465)
将这里原来的SMTP
修改为SMTP_SSL
则成功发出邮件
第二个可以发送文本内容、链接,图片内容和文本附件的邮件程序,且有多个收件人
import smtplib
from email.mime.text import MIMEText #发送文本文件
from email.mime.multipart import MIMEMultipart #附件
from email.mime.image import MIMEImage #图片
from email.utils import formataddr
import os
class Email_Example(object):
def __init__(self):
# 输入邮箱地址和口令
self.sender_addr= 'xxxxx@qq.com'
self.password = 'xxxxxx' #授权码
#输入SMTP服务器地址:
self.stmp_server ='smtp.qq.com' #qq邮箱SMTP服务器地址
#收件人地址
self.receive_addr = ['14xxx@qq.com','1xxxxx@qq.com']#多个收件人就用list
def set_content(self):
#创建邮件对象
self.msgRoot = MIMEMultipart('alternative')
#设置基本信息
self.title = 'python email test'
self.msgRoot['From'] = formataddr(['JQ',self.sender_addr])
self.msgRoot['To'] = formataddr(self.receive_addr)
self.msgRoot['Subject'] = self.title #邮件title
#设置正文文本内容
mail_text = 'HELL0'
self.msgRoot.attach(MIMEText(mail_text,'plain','utf-8'))
#设置html格式内容,并把图片嵌入正文文本
#要把图片嵌入到邮件正文中,我们只需按照发送附件的方式,先把邮件作为附件添加进去,
# 然后,在HTML中通过引用src="cid:0"就可以把附件作为图片嵌入了。
# 如果有多个图片,给它们依次编号,然后引用不同的cid:x即可
mail_html ="""
<p>html内容</p>
<p><a href="https://www.baidu.com">百度一下</a></p>
<p><img src="cid:image1"></p>
"""
self.msgRoot.attach(MIMEText(mail_html,'html','utf-8'))
#设置图片目录
file_path =os.path.abspath('.')+r'\1'
img_path =os.path.abspath('.')+r'\1.png'
fp = open(img_path, 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')#设置图片id
self.msgRoot.attach(msgImage)
#多个附件发送(文件)
for f in os.listdir(file_path):
print(f)
path = os.path.join(file_path,f)
msgFile = MIMEText(open(path).read())
msgFile["Content-Type"] = 'application/octet-stream'
msgFile["Content-Disposition"] = 'attachment; filename=' + f
self.msgRoot.attach(msgFile)
def mail_send(self):
try:
server = smtplib.SMTP_SSL(self.stmp_server,465) #qq邮箱SMTP服务器ssl端口号465
server.set_debuglevel(1) #就可以打印出和SMTP服务器交互的所有信息
server.login(self.sender_addr,self.password)
server.sendmail(self.sender_addr,self.receive_addr,self.msgRoot.as_string()) #把文本内容转化为string
print('邮箱链接成功')
server.quit()
except smtplib.SMTPException as e: #异常SMTPException
print("邮箱链接失败,链接失败原因,%s"%e)
if __name__ =='__main__':
email = Email_Example()
email.set_content()
email.mail_send()
终于了解了大概的原理,在自动化框架中接着运用