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、参考代码
1 # coding=utf-8 2 #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行 3 4 #2.注释:包括记录创建时间,创建人,项目名称。 5 ''' 6 Created on 2019-5-8 7 @author: 北京-宏哥 8 Project:学习和使用163邮箱发邮件 9 ''' 10 #3.导入模块 11 import smtplib 12 from email.mime.text import MIMEText 13 # ----------1.跟发件相关的参数------ 14 smtpserver = "smtp.163.com" # 发件服务器 15 port = 0 # 端口 16 sender = "hongge@163.com" # 账号 17 psw = "**************" # 密码 18 receiver = "1918991791@qq.com" # 接收人 19 # ----------2.编辑邮件的内容------ 20 subject = "这个是主题 163" 21 body = '<p>这个是发送的 163 邮件</p>' # 定义邮件正文为 html 格式 22 msg = MIMEText(body, "html", "utf-8") 23 msg['from'] = sender 24 msg['to'] = "19198991791@qq.com" 25 msg['subject'] = subject 26 # ----------3.发送邮件------ 27 smtp = smtplib.SMTP() 28 smtp.connect(smtpserver) # 连服务器 29 smtp.login(sender, psw) # 登录 30 smtp.sendmail(sender, receiver, msg.as_string()) # 发送 31 smtp.quit() # 关闭
QQ邮箱(SSL)
1、QQ 邮箱是需要 SSL 认证的,这种邮箱跟上面的就有点不一样了(如果已经开启了,不知道授权码,就点温馨提示里面的‘生成授权码’)
2、找到 QQ 邮箱授权码,打开 QQ 邮箱-设置-账号-POP3 开启服务-开启
3、根据相对应的验证方式,就会收到授权码了
4、收到授权码后复制,保存下来,这个就可以当 QQ 邮箱的密码了
5、QQ 邮箱发送邮件代码,跟 163 有点不一样,如下图红色框框:
6、参考代码
1 # coding=utf-8 2 #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行 3 4 #2.注释:包括记录创建时间,创建人,项目名称。 5 ''' 6 Created on 2019-5-8 7 @author: 北京-宏哥 8 Project:学习和使用QQ邮箱发邮件 9 ''' 10 #3.导入模块 11 import smtplib 12 from email.mime.text import MIMEText 13 # ----------1.跟发件相关的参数------ 14 # smtpserver = "smtp.163.com" # 发件服务器 15 smtpserver = "smtp.qq.com" 16 port = 465 # 端口 17 sender = "1918991791@qq.com" # 账号 18 psw = "**************" # 密码 19 receiver = "1918991791@qq.com" # 接收人 20 # ----------2.编辑邮件的内容------ 21 subject = "这个是主题 QQ" 22 body = '<p>这个是发送的 QQ 邮件</p>' # 定义邮件正文为 html 格式 23 msg = MIMEText(body, "html", "utf-8") 24 msg['from'] = sender 25 msg['to'] = "1918991791@qq.com" 26 msg['subject'] = subject 27 # ----------3.发送邮件------ 28 # smtp = smtplib.SMTP() 29 # smtp.connect(smtpserver) # 连服务器 30 smtp = smtplib.SMTP_SSL(smtpserver, port) 31 smtp.login(sender, psw) # 登录 32 smtp.sendmail(sender, receiver, msg.as_string()) # 发送 33 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、参考代码
1 # ----------3.发送邮件------ 2 try: 3 #非SSL 4 smtp = smtplib.SMTP() 5 smtp.connect(smtpserver) # 连服务器 6 except: 7 #SSL 8 smtp = smtplib.SMTP_SSL(smtpserver, port) 9 smtp.login(sender, psw) # 登录 10 smtp.sendmail(sender, receiver, msg.as_string()) # 发送 11 smtp.quit() # 关闭
小结
1、小伙伴们下次遇到这样的直接就用兼容SSL和非SSL的发送邮件代码即可。其实也是很简单!!!
感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的
本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
公众号(关注宏哥)                                                                                 客服微信
![个人微信公众号](https://img2018.cnblogs.com/common/1741949/201911/1741949-20191119095948011-608816619.png)
![个人微信](https://img2018.cnblogs.com/common/1741949/201911/1741949-20191106101257091-849954564.png)