简介 

  本篇总结了 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测试报告通过邮件发出去——下(详解)的更多相关文章

  1. python接口自动化(十一)--发送post【data】(详解)

    简介 前面登录博客园的是传 json 参数,由于其登录机制的改变没办法演示,然而在工作中有些登录不是传 json 的,如 jenkins 的登录,这里小编就以jenkins 登录为案例,传 data ...

  2. python接口自动化(二十四)--unittest断言——中(详解)

    简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言.这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京 ...

  3. python接口自动化(十八)--重定向(Location)(详解)

    简介 在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url.URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作.但是自己又不希望通过主域 ...

  4. python接口自动化(三十)--html测试报告通过邮件发出去——中(详解)

    简介 上一篇,我们虽然已经将生成的最新的测试报告发出去了,但是MIMEText 只能发送正文,无法带附件,因此我还需要继续改造我们的代码,实现可以发送带有附件的邮件.发送带附件的需要导入另外一个模块 ...

  5. python接口自动化(二十九)--html测试报告通过邮件发出去——上(详解)

    简介 前边几篇,已经教小伙伴们掌握了如何生成HTML的测试报告,那么生成测试报告,我们也不能放在那里不管了,这样即使你报告在漂亮,领导也看不到.因此如果想向领导汇报工作,不仅需要提供更直观的测试报告. ...

  6. python接口自动化三(登录绕开验证码及发帖)

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 但是这里需要明确 ...

  7. python接口自动化(二十八)--html测试 报告——下(详解)

    简介 五一小长假已经结束了,想必大家都吃饱喝足玩好了,那就继续学习吧.一天不学习,自己知道:两天不学习,对手知道:三天不学习,大家知道:一周不学习,智商输给猪.好了开个玩笑都逗大家一乐,但是想想还是有 ...

  8. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  9. python接口自动化-Cookie_绕过验证码登录

    前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...

随机推荐

  1. SqlServer删除复制监视器中无效的发布名称

    原文:SqlServer删除复制监视器中无效的发布名称 在服务器复制监视器中有一个发布名称,因为该发布订阅已经删除. ReportServerTempDB只有一个发布,已无效,打算删除. --直接删除 ...

  2. 子函数内malloc分配内存,论如何改变指针参数所指内存,二级指针、三级指针的应用

    工作中优化一段代码,代码中有一大段分配堆内存的内容,我觉得这段代码太长了,更适合放在子函数里面. 我把指针作为参数,然后在子函数中malloc分配内存,结果出现了问题,函数结束后,以参数传进来的指针并 ...

  3. windows界面程序设计,设置一个窗口始终在屏幕最前,SetWindowPos函数

    有时这种需求还是很必须的,比如现在做的一个登录验证系统,如果在windows登录界面点击到窗口外面,那窗口就会永远隐藏掉没法再启用了.这种情况必须设置该窗口一直在最前. 使用函数SetWindowPo ...

  4. Android零基础入门第44节:ListView数据动态更新

    原文:Android零基础入门第44节:ListView数据动态更新 经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是 ...

  5. CS224n笔记一:开端

    何为自然语言处理 自然语言处理的目标是让计算机处理或者"理解"自然语言,以完成有意义的任务,如QA等. 自然语言处理涉及的层次 输入有两个来源:语音和文本,所以第一级是语音识别,O ...

  6. Android View 滚动边界的测量

    最近一直在用Android TV的RecyclerView,实现视频搜索列表卡片的滚动显示,由于采用了双排滚动,打破了系统默认的单排滚动,且每一屏幕显示10个完整卡片5个半漏边卡片,每个完整卡片的左下 ...

  7. 读取注册表获取Windows系统XP/7/8/10类型(使用wcscmp比较wchar[]内容)

    很多方案是采用GetVersion.GetVersionEx这两个API来查询操作系统的版本号来判断当前的操作系统是Windows系列中的哪个,在Win10没有出现前,这种方法是行的通的,但是Win1 ...

  8. .NET Core IdentityServer4实战 第Ⅳ章-集成密码登陆模式

    回顾下ClientCredentials模式,在ReSourceApi中定义了我们公开服务,第三方网站想要去访问ReSourceApi则需要在身份验证服务中获取toekn,根据token的内容,硬编码 ...

  9. 《JavaScript 高级程序设计》读书笔记

    文章目录 第三章 基本语法 第四章 变量.作用域和内存问题 第五章 应用类型 1. Array 类型 2. RegExp 类型 3. Function 类型 4. String 类型 第六章 面向对象 ...

  10. 系统学习 Java IO (十)----回退流 PushbackInputStream

    目录:系统学习 Java IO---- 目录,概览 PushbackInputStream 旨在从 InputStream 解析数据时使用. 有时您需要先读取几个字节以查看将要发生的事情,然后才能确定 ...