Selenium实战(七)——自动发送邮件
SMPT(Simple Mail Transfer Protocol)简单邮件传输协议,是一组由源地址到目的地址传送邮件的规则,可以控制信件的中转方式。Python的smptlib模块提供了简单的API用来实现发送邮件的功能,它对SMPT进行了简单的封装。
一、python自带的发送邮件功能
1、发送邮件正文
import smtplib
from email.mime.text import MIMEText
from email.header import Header # 发送邮件主题
subject = 'hello my dear;' # 编写HTML类型的邮件正文
msg = MIMEText('<html><h1>helloMMAMAMAAMAM</h1></html>', 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['from'] = 'zudangli@126.com'
msg['to'] = 'zudangli@126.com' # 发送邮件
smtp = smtplib.SMTP()
smtp.connect("smtp.126.com")
smtp.login("zudangli@126.com", "19970507zudangli")
smtp.sendmail("zudangli@126.com", "zudangli@126.com", msg.as_string())
smtp.quit()
,
email模块下面的MIMEText类,定义发送邮件的正文、格式,以及编码,Header类定义邮件的主题和编码类型
smptlib模块用于发送邮件的。connect()方法指定连接的邮箱服务;login()方法指定登录邮箱的账号和密码;sendmail()方法指定发件人、收件人,以及邮件的正文;quit()方法用于关闭邮件服务器的连接。

2、发送带附件的邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart # 邮件主题
subject = 'python带附件的发送邮件'
# 发送的附件
with open('test.txt', 'rb') as f:
send_att = f.read() att = MIMEText(send_att, 'text', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment; filename="I am attachment.txt"' msg = MIMEMultipart()
msg['Subject'] = subject
msg['from'] = 'zudangli@126.com'
msg['to'] = 'zudangli@126.com'
msg.attach(att) # 发送邮件
smtp = smtplib.SMTP()
smtp.connect("smtp.126.com")
smtp.login("zudangli@126.com", "19970507zudangli")
smtp.sendmail("zudangli@126.com", "zudangli@126.com", msg.as_string())
smtp.quit()

首先,读取附件的内容。通过MIMEText类,定义发送邮件的正文、格式,以及编码;
- Content-Type指定附件内容类型;
- application/octet-stream表示二进制流;
- Content-Disposition指定显示附件的文件
然后,使用MIMEMultipart类定义邮件的主题,attach()指定附件信息。
最后,通过smtplib模块发送邮件。

二、用yagmail发送邮件
yagmail是Python的一个第三方库,GitHub项目地址:https://github.com/kootenpv/yagmail
安装命令:pip install yagmail

import yagmail # 连接邮箱服务器
yag = yagmail.SMTP(user="zudangli@126.com", password="19970507zudangli", host="smtp.126.com") # 邮件正文
contents = ['This is the body,and here is just text http://somedomain/image.png', 'You can find an audio file attached.'] # 发送邮件
yag.send('zudangli@126.com', 'subject', contents)


如果想给多个用户发送邮件,只需要把收件人放到一个list中即可
yag.send(['pegawayatstudying@126.com', '1271916637@qq.com', 'zudangli@126.com'], 'subject', contents)

如果想发送带附件的邮件,只需要指定本地附件的路径即可。
yag.send(['pegawayatstudying@126.com', '1271916637@qq.com', 'zudangli@126.com'], 'subject', contents, ["C://Users//zudl//Pictures//timg.jpg","F://秒通OApython//formal.py"])

三、整合自动发送邮件
import time
import unittest
import yagmail from HTMLTestRunner import HTMLTestRunner # 把测试报告作为附件发送到指定邮箱
def send_mail(report):
yag = yagmail.SMTP(user="zudangli@126.com",
password="19970507zudangli",
host='smtp.126.com')
subject = "主题,自动化测试报告"
contents = "正文,请查看附件"
yag.send(['1271916637@qq.com', 'pegawayatstudying@126.com', 'zudangli@126.com'], subject, contents, report)
print('email has send out !') if __name__ == '__main__':
# 定义测试用例的目录为当前目录中的unit_test
test_dir = './'
suits = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
# 取当前日期时间
now_time = time.strftime("%Y-%m-%d %H_%M_%S")
html_report = './' + now_time + 'result.html'
# 生成HTML格式的测试报告
fp = open('./' + now_time + 'result.html', 'wb')
runner = HTMLTestRunner(stream=fp,
title="百度搜索测试报告",
description="运行环境:Windows 10,Chrome浏览器")
runner.run(suits)
fp.close()
send_mail(html_report)


整个程序的执行过程分为两部分:
(1)定义测试报告文件,并赋值给变量html_report,通过HTMLTestRunner运行测试用例,将结果写入文件后关闭。
(2)调用send_mail()函数,并传入html_report文件。在send_mail()函数中,把测试报告作为邮件的附件发送到指定邮箱。
AS a side Note: 不直接把测试报告的内容读取出来作为邮件的正文发送的原因:HTMLTeatRunner报告在展示时引用了Bootstrap样式库,当作为邮件正文“写死”在邮件中时,会导致样式丢失。
Selenium实战(七)——自动发送邮件的更多相关文章
- python+selenium生成测试报告后自动发送邮件
标签(空格分隔): 自动化测试 运行自动化脚本后,会产生测试报告,而将测试报告自动发送给相关人员,能够让对方及时的了解测试情况,查看测试结果. 整个脚本包括三个部分: 生成测试报告 获取最新的测试报告 ...
- Selenium实战脚本集—新浪微博发送QQ每日焦点
Selenium实战脚本集-新浪微博发送QQ每日焦点 http://www.spasvo.com/ceshi/open/kygncsgj/Selenium/201549150822.html 背景 很 ...
- SpringSecurity权限管理系统实战—七、处理一些问题
目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...
- 【C#】新建服务自动发送邮件
---windows服务,---自动发送邮件 邮件发送code #region 发送邮件函数 public void SendMailUseZj() { System.Net.Mail.MailMes ...
- Jenkins配置自动发送邮件,成功!
Jenkins自动发送邮件配置: 打开"系统管理"--"系统设置" 在"Jenkins Location"设置系统管理员地址(重要:不能省略 ...
- VBA控制outlook自动发送邮件(转)
使用Excel VBA实现Outlook自动发送邮件 | 在工作上我们都会遇到批量发送邮件的情况,面对重复而规律性的工作,可以使用Excel的VBA实现自动批量化发送邮件.大大减小工作时间,提升工作效 ...
- Jenkins进阶之自动发送邮件的Default Content设置模板
分享一个简洁实用的Jenkins项目邮件管理系统的"Default Content"设置模板 配置如下: <h1><center><font colo ...
- selenium实战脚本集——新浪微博发送QQ每日焦点(火狐)
selenium实战脚本集(1)——新浪微博发送QQ每日焦点,乙醇用谷歌实现的,下边是用火狐实现的. 代码如下: # coding = utf-8 from selenium import webdr ...
- VBS 自动发送邮件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
随机推荐
- [求解!!!] springboot在运行web项目时报错
2017-05-10 17:40:54.343 INFO 4852 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing ...
- 自学Java第四章——《数组》
4.1 数组的相关概念和名词(了解) 1.数组(array): 一组具有相同数据类型的数据的按照一定顺序排列的集合. 把有限的几个相同类型的变量使用一个名称来进行统一管理. 2.数组名: (1)这个数 ...
- Eureka注册中心高可用集群配置
Eureka高可用集群配置 当注册中心扛不住高并发的时候,这时候 要用集群来扛: 我们再新建两个module microservice-eureka-server-2002 microservic ...
- java-zhisji
1. int indexOf(int ch):用来检查给定的一个字符在当前字符串中第一次出现的下标位置.这里的下标和数组的下标意思相近,0表示该字符串的第1个字符,以此类推.当该字符串中并不 ...
- 斐波那契数列(php实现)
描述 斐波那契数列指的是这样一个数列:1.1.2.3.5.8.13.21.34... 规则 : 有N个数,第i个数的值 N(i)= N(i-1) + N(i-2) 需求: 给出下标i ,求第i 的个数 ...
- avtivity与view
view和activity的区别 activity相当于控制部分,view相当于显示部分.两者之间是多对多的关系,所有东西必须用view来显示. viewGroup继承自view,实现了ViewMa ...
- Shell:setfacl缩小普通用户的权限
简介 我们在使用jumpserver的过程中,会向主机推送普通用户,但普通用户有上传下载文件的权限,要想对这些权限进行管控就比较困难,之前考虑通过将$PATH变量下的命令的权限设置为750,设置完发现 ...
- 版本控制工具-svn
两个疑问: 1.什么是版本控制? 2.为什么要用版本控制工具? 银联卡的特征: 1.受保护的 2.受约束的 如何与银联卡对应? 1.个人的代码--口袋里的钱 2.版本控制工具中的代码--银联卡里的钱 ...
- java8 Stream API笔记
生成Stream Source的方式 从Collection和数组生成 * Collection.stream() * Collection.parallelStream() * Arrays.str ...
- Python Special Methods - 特殊方法
特殊方法 特殊方法的存在是为了给 Python 解释器调用的,通常自己并不需要直接调用它们.也就是说不应该使用 my_object.__len__() 这种写法,而应该使用 len(my_object ...