我们自动化脚本运行完成之后生成了测试报告,如果能将结果自动的发到邮箱就不用每次打开阅读,

而且随着脚本的不段运行,生成的报告会越来越多,找到最近的报告也是一个比较麻烦的事件;如果能自

动的将结果发到 boss 邮箱,也是个不错的选择。

Python 的 smtplib 模块提供了一种很方便的途径发送电子邮件。它对 smtp 协议进行了简单的封装。

smtp 协议的基本命令包括:

HELO 向服务器标识用户身份

MAIL 初始化邮件传输 mail from:

RCPT 标识单个的邮件接收人;常在 MAIL 命令后面,可有多个 rcpt to:

DATA 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以.结束

VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令

EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用

HELP 查询服务器支持什么命令

NOOP 无操作,服务器应响应 OK

QUIT 结束会话

RSET 重置会话,当前传输被取消

MAIL FROM 指定发送者地址

RCPT TO 指明的接收者地址

一般 smtp 会话有两种方式,一种是邮件直接投递,就是说,比如你要发邮件給 zzz@126.com,那就

直接连接126.com 的邮件服务器,把信投給 zzz@126.com; 另一种是验证过后的发信,它的过程是,比如

你要发邮件給 zzz@126.com,你不是直接投到126.com,而是通过自己在 sina.com 的另一个邮箱来发。这

样就要先连接 sina.com 的 smtp 服务器,然后认证,之后在把要发到126.com 的信件投到 sina.com 上,

sina.com 会帮你把信投递到163.com。

下面解析几种发邮件的实例,让我们深入理解发邮件的实现。

发送 HTML 格式的邮件

send_mail.py

#coding=utf-8

import smtplib

from email.mime.text import MIMEText

from email.header import Header

#发送邮箱

sender = 'testingwtb@126.com'

#接收邮箱

receiver = 'xiaoming@qq.com'

#发送邮件主题

subject = 'Python email test'

#发送邮箱服务器

smtpserver = 'smtp.126.com'

#发送邮箱用户/密码

username = 'testingwtb@126.com'

password = '123456'

#编写 text 类型的邮件正文

msg = MIMEText('<html><h1>你好!</h1></html>','html','utf-8')

msg['Subject'] = Header(subject, 'utf-8')

smtp = smtplib.SMTP()

smtp.connect('smtp.126.com')

smtp.login(username, password)

smtp.sendmail(sender, receiver, msg.as_string())

smtp.quit()

发送邮件的实现本身没有什么逻辑性,建立在我们发电子邮件的理解上,如果你使用过电子邮件,那

么一定自己的邮箱地址,如果要发送邮件还需要对方的邮箱地址,在编写邮件的过程中需要填写邮件主题、

正文,或者有时还要加个附件。如果使用你平时使用的是邮箱客户端,如 foxmail 等,那么在首次使用的

时候,还要配置邮箱服务器,一般需要用的 SMTP/POP3 协议。好吧,知道这些就已经足够了。上面的代码

其实也就是在配置这些。

import smtplib

导入 smtplib 发邮件模块,程序中邮件的发送、接收等相关服务,全部由 smtplib.SMTP 方法来完成。

from email.mime.text import MIMEText

from email.header import Header

导入 email 模块,MIMEText 和 Header 主要用来完邮件内容与邮件标题的定义。

smtp.connect() 用于链接邮件服务器

smtp.login() 配置发送邮箱的用户名密码

smtp.sendmail() 配置发送邮箱,接收邮箱,以及发送内容

smtp.quit() 关闭发邮件服务

运行程序,登录接收邮件的邮箱(xiaoming@126.com),会看一封发来的邮件。