python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)
简介
本篇总结了 QQ (SSL)邮箱和 163(非SSL) 邮箱发送邮件,专治各种不行,总之看完这篇以后麻麻再也不用担心我的邮件收不到了。以下代码兼容 python2 和 python3,运行无异常,放心大胆使用。
常用邮件协议
发送邮件:SMTP
收取邮件:POP3、IMAP
常用邮件配置项
配置项 | 说明 |
mail.xxx.ssl.enable | 是否支持 SSL 连接 |
mail.xxx.host | 邮件服务器主机名 |
mail.xxx.port | 邮件服务器端口号 |
mail.xxx.auth | 是否进行身份认证 |
说明:xxx 表示协议名称,例如:smtp、pop3 等。
默认端口号
SMTP | POP3 | IMAP | |
普通方式(非SSL) | 25 | 110 | 143 |
SSL 方式 | 465 | 995 | 993 |
163邮箱(非SSL)
1、先导入 smtplib 库用来发送邮件,导入 MIMEText 库用来做纯文本的邮件模板
2、先准备几个跟发邮件相关的参数,每个邮箱的发件服务器都不一样,以 163为例,百度搜到发件服务器为:smtp.163.com
3、接下来就是写邮件的主题和正文内容,正文这里用 html 格式的
4、最后调用发件服务
5、参考代码
- # coding=utf-
- #.先设置编码,utf-8可支持中英文,如上,一般放在第一行
- #.注释:包括记录创建时间,创建人,项目名称。
- '''
- Created on --
- @author: 北京-宏哥
- Project:学习和使用163邮箱发邮件
- '''
- #.导入模块
- import smtplib
- from email.mime.text import MIMEText
- # ----------.跟发件相关的参数------
- smtpserver = "smtp.163.com" # 发件服务器
- port = # 端口
- sender = "hongge@163.com" # 账号
- psw = "**************" # 密码
- receiver = "1918991791@qq.com" # 接收人
- # ----------.编辑邮件的内容------
- subject = "这个是主题 163"
- body = '<p>这个是发送的 163 邮件</p>' # 定义邮件正文为 html 格式
- msg = MIMEText(body, "html", "utf-8")
- msg['from'] = sender
- msg['to'] = "19198991791@qq.com"
- msg['subject'] = subject
- # ----------.发送邮件------
- smtp = smtplib.SMTP()
- smtp.connect(smtpserver) # 连服务器
- smtp.login(sender, psw) # 登录
- smtp.sendmail(sender, receiver, msg.as_string()) # 发送
- smtp.quit() # 关闭
QQ邮箱(SSL)
1、QQ 邮箱是需要 SSL 认证的,这种邮箱跟上面的就有点不一样了(如果已经开启了,不知道授权码,就点温馨提示里面的‘生成授权码’)
2、找到 QQ 邮箱授权码,打开 QQ 邮箱-设置-账号-POP3 开启服务-开启
3、根据相对应的验证方式,就会收到授权码了
4、收到授权码后复制,保存下来,这个就可以当 QQ 邮箱的密码了
5、QQ 邮箱发送邮件代码,跟 163 有点不一样,如下图红色框框:
6、参考代码
- # coding=utf-
- #.先设置编码,utf-8可支持中英文,如上,一般放在第一行
- #.注释:包括记录创建时间,创建人,项目名称。
- '''
- Created on --
- @author: 北京-宏哥
- Project:学习和使用QQ邮箱发邮件
- '''
- #.导入模块
- import smtplib
- from email.mime.text import MIMEText
- # ----------.跟发件相关的参数------
- # smtpserver = "smtp.163.com" # 发件服务器
- smtpserver = "smtp.qq.com"
- port = # 端口
- sender = "1918991791@qq.com" # 账号
- psw = "**************" # 密码
- receiver = "1918991791@qq.com" # 接收人
- # ----------.编辑邮件的内容------
- subject = "这个是主题 QQ"
- body = '<p>这个是发送的 QQ 邮件</p>' # 定义邮件正文为 html 格式
- msg = MIMEText(body, "html", "utf-8")
- msg['from'] = sender
- msg['to'] = "1918991791@qq.com"
- msg['subject'] = subject
- # ----------.发送邮件------
- # smtp = smtplib.SMTP()
- # smtp.connect(smtpserver) # 连服务器
- smtp = smtplib.SMTP_SSL(smtpserver, port)
- smtp.login(sender, psw) # 登录
- smtp.sendmail(sender, receiver, msg.as_string()) # 发送
- smtp.quit() # 关闭
兼容 163(非SSL) 和 QQ 邮箱(SSL)
1、Python中检测处理异常是非常重要的,这可以增加代码的健壮性,我们在写python程序的时候,会可能会遇到一些不可预料的情况,一旦遇到这些情况,运行时程序便可能会崩溃。异常可以通过 try 语句来检测. 任何在 try 语句块里的代码都
会被监测, 检查有无异常发生。
try 语句有两种主要形式: try-except 和 try-finally . 这两个语句是互斥的, 也就是说你只能使用其中的一种 . 一个 try 语句可以对应一个或多个 except 子句 , 但只能对应一个finally 子句, 或是一个 try-except-finally 复合语句.
try-except 语句(以及其更复杂的形式)定义了进行异常监控的一段代码, 并且提供了处理异常的机制.
最常见的 try-except 语句语法如下所示,它由try块和except块 (try_suite 和 except_suite )组成, 也可以有一个可选的错误原因。首先尝试执行 try 子句, 如果没有错误, 忽略所有的 except 从句继续执行,如果发生异常, 解释器将在这一串处理器
(except 子句)中查找匹配的异常。
简单用法(except后面不跟特定异常,这会捕获所有异常)这种好处就是你不知道会发生什么异常,尽管用;坏处就是当异常发生时候,不能清楚了解到底发生哪种异常。
我们可以发现,连接没有成功,但程序是正常运行的,会继续往下运行如果没有try,程序则会中断报错。我们发现第一个print并没有运行,这是因为try 语句块中异常发生点后的剩余语句永远不会到达(所以也永远不会执行)。
2、好了关于try的讲解就到这里,回归正题:如果想兼容上面两种方式发送邮件,只需把第三块内容稍微改下,如下所示
3、参考代码
- # ----------.发送邮件------
- try:
- #非SSL
- smtp = smtplib.SMTP()
- smtp.connect(smtpserver) # 连服务器
- except:
- #SSL
- smtp = smtplib.SMTP_SSL(smtpserver, port)
- smtp.login(sender, psw) # 登录
- smtp.sendmail(sender, receiver, msg.as_string()) # 发送
- smtp.quit() # 关闭
小结
1、小伙伴们下次遇到这样的直接就用兼容SSL和非SSL的发送邮件代码即可。其实也是很简单!!!
python接口自动化(三十一)--html测试报告通过邮件发出去——下(详解)的更多相关文章
- python接口自动化(十一)--发送post【data】(详解)
简介 前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data ...
- python接口自动化(二十四)--unittest断言——中(详解)
简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言.这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京 ...
- python接口自动化(十八)--重定向(Location)(详解)
简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url.URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作.但是自己又不希望通过主域 ...
- python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)
简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件.发送带附件的需要导入另外一个模块 ...
- python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)
简介 前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,我们也不能放在那里不管了,这样即使你报告在漂亮,领导也看不到.因此如果想向领导汇报工作,不仅需要提供更直观的测试报告. ...
- python接口自动化三(登录绕开验证码及发帖)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 但是这里需要明确 ...
- python接口自动化(二十八)--html测试 报告——下(详解)
简介 五一小长假已经结束了,想必大家都吃饱喝足玩好了,那就继续学习吧.一天不学习,自己知道:两天不学习,对手知道:三天不学习,大家知道:一周不学习,智商输给猪.好了开个玩笑都逗大家一乐,但是想想还是有 ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- python接口自动化-Cookie_绕过验证码登录
前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...
随机推荐
- 支持chrome30下载文件
function downloadX(url ,fileName){ const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr ...
- C#获取带汉字的字符串长度
正常情况下,我们是直接去string的length的,但是汉字是有两个字节的,所以直接用length是错的.如下图: 所以应该用以下代码来获取长度: private void button1_Clic ...
- Win10《芒果TV》商店版更新v3.7.0卡牌版:为小冰生日献礼,为秋季创意者更新铺路
由宇宙跨物种新晋主持微软小冰和绍刚叔联袂主持的中国首档原创顶尖科技秀<我是未来>正在芒果台热播,Win10版<芒果TV>更新v3.7.0卡牌版,为微软小冰9月17日生日献礼. ...
- GIS基础软件及操作(四)
原文 GIS基础软件及操作(四) 练习四.空间数据处理 1.空间数据处理(融合.合并.剪切.交叉.合并)2.设置地图投影及投影变换 空间数据处理 数据:云南县界.shp; Clip.shp西双版纳森林 ...
- 使用NAudio实现Wav转Mp3
转换成MP3: using Microsoft.Win32; using NAudio.MediaFoundation; using NAudio.Wave; using System.Windows ...
- C++/CLI 中使用 ref 和 out
void fun(int^ % i){} // C# ref void fun([out]int^ % i) {} // C# out
- Linux下的软件安装
在线安装 APT:advanced packaging Tool,Debian及其派生的发行版的软件包管理工具,包含以apt-开头的多个工具,如apt-get,apt-cache,apt-cdrom ...
- qt sql事务操作
事务是数据库的一个重要功能,所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位.在Qt中用transaction()开始一个事务操作,用commit()函数或 ...
- 一些Windows API导致的Crash以及使用问题总结(API的AV失败,可以用try catch捕捉后处理)
RegQueryValueEx gethostbyname/getaddrinfo _localtime64 FindFirstFile/FindNextFile VerQueryValue Crea ...
- 【canvas】基础练习二 文字
demo1 fillText strokeText绘制文字 <!DOCTYPE html> <html lang="en"> <head> &l ...