自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用例后,将测试报告(HTML、截图、附件)通过邮件方式发送。

参考代码:send_mail.py

一、python对SMTP的支持

SMTP(Simple Mail Transfer Protocol)是简单传输协议,它是一组用于用于由源地址到目的地址的邮件传输规则。

python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

1、python对SMTP的支持

①email模块:负责构建邮件

②smtplib模块:负责发送邮件

可以通过help()方法查看SMTP提供的方法:

 >>> from smtplib import SMTP
>>> help(SMTP)
Help on class SMTP in module smtplib: class SMTP(builtins.object)
| This class manages a connection to an SMTP or ESMTP server.
| SMTP Objects:
| SMTP objects have the following attributes:
| helo_resp
| This is the message given by the server in response to the
| most recent HELO command.
|
| ehlo_resp
| This is the message given by the server in response to the
| most recent EHLO command. This is usually multiline.
|
| does_esmtp
| This is a True value _after you do an EHLO command_, if the
| server supports ESMTP.
20 | ......

导入SMTP,查看对象注释。。。。。。

2、sendmail()方法的使用说明

①connect(host,port)方法参数说明

host:指定连接的邮箱服务器

port:指定连接的服务器端口

②login(user,password)方法参数说明

user:登录邮箱用户名

password:登录邮箱密码

③sendmail(from-addr,to_addrs,msg...)方法参数说明

from_addr:邮件发送者地址

to_addrs:字符串列表,邮件发送地址

msg:发送消息

④quit():结束当前会话

二、发送不同格式的邮件

1、纯文本格式的邮件

 # coding=utf-8
import smtplib
from email.mime.text import MIMEText
# 发送纯文本格式的邮件
msg = MIMEText('hello,send by python_test...','plain','utf-8')
#发送邮箱地址
sender = 'sender@163.com'
#邮箱授权码,非登陆密码
password = ''
#收件箱地址
receiver = 'receiver@qq.com'
#smtp服务器
smtp_server = 'smtp.163.com'
#发送邮箱地址
msg['From'] = sender
#收件箱地址
msg['To'] = receiver
#主题
msg['Subject'] = 'from IMYalost'
server = smtplib.SMTP(smtp_server,25) server.login(sender,password)
server.sendmail(sender,receiver,msg.as_string())
server.quit()

login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,可以一次发给多个人,所以传入一个list,邮件正文是一个str,as_string()把MIMEText对象变成str。

为了方便演示,这里用的是163和QQ邮箱,收到的邮件内容如下:

2、HTML格式的邮件

如果想发送HTML类型的邮件,只需要下面的一段代码即可:

 # coding=utf-8
import smtplib
from email.mime.text import MIMEText
# 发送HTML格式的邮件
msg = MIMEText('<html><h1>人生苦短,我用python</html></h1>','html','utf-8')

收到的邮件内容如下:

PS:注意这里的区别,msg中输入的是邮件正文,因此需要根据具体内容格式选择合适的类型!

关于不同类型文件的对应类型,可参考此链接:HTTP Content-type 对照表

3、邮件格式的关系

构造一个邮件对象就是一个message对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片;

要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。它们的继承关系如下:

 Message
+- MIMEBase
+- MIMEMultipart
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText
+- MIMEImage

可以通过email.mime文档查看它们所在的包以及详细的用法。

三、SMTP发送邮件之坑

1、协议之坑

因为采用的是SMTP协议,那么需要确保自己的发送优邮箱地址开启了SMTP服务,否则,会报错

2、password之坑

看了很多例子,都是将邮箱登录密码设置为password,然后就华丽丽的懵逼了,报错!!!whf!!!

事实的真相是:password需要输入邮箱授权码,而非邮箱登录密码!!!

3、各种报错

我在调试的时候,遇到很多的报错,大多都是这些:smtplib.SMTPDataError(553/554...)

根据报错里面的链接:see http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html,找到对应的问题,仔细检查代码,慢慢debug吧。。。

PS:如果收件邮箱的传输经过加密,必须经过SSL加密再STMP传输,出现554(发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件),发生了一件有趣的事情:

网易邮箱的处理结果是发生回退,即邮件发送失败,转回了收件箱。。。

QQ邮箱的处理结果,是将邮件放进垃圾邮件里面。。。

总结:发生报错的原因还是技术不到家,不够细心啊,唉,年轻人。。。

附:常用的邮箱服务器(POP3、SMTP)地址、端口

利用python对SMTP的内置封装支持,发送邮件的代码和注意事项基本就是以上几点,当然,其中的代码都是demo,具体实践过程还需要根据实际情况做调整。。。

python:利用smtplib模块发送邮件的更多相关文章

  1. python之smtplib模块 发送邮件

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #smtplib模块 发送邮件 import smtplib from email.mime.text imp ...

  2. python:利用smtplib模块发送邮件详解

    自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用例后,将测试报告(HTML.截图.附件)通过邮件方式发送. 首先我们要做: 进入163邮箱,点击设置中的pop3/ ...

  3. python爬虫-smtplib模块发送邮件

    1.代码如下: import smtplib from email.message from EmailMessage # smtplib模块负责发送邮件服务 # email.message模块负责构 ...

  4. python调用smtplib模块发送邮件

    #!/usr/bin/env python #coding: utf-8 import smtplib from email.mime.text import MIMEText from email. ...

  5. 通过python操作smtplib模块发送邮件

    # gconf.py SMTP_SERVER_HOST='smtp.exmail.qq.com' SMTP_SERVER_PORT=25 SMTP_USER='jack@qq.com' # 邮箱客户端 ...

  6. python之使用smtplib模块发送邮件

    # 使用smtplib模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Heade ...

  7. python:利用smtplib发送邮件详解

    本文转自:https://www.cnblogs.com/insane-Mr-Li/p/9121619.html 自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用 ...

  8. 使用python调用email模块发送邮件附件

    使用python调用email模块实现附件发送 需要模块: import datetime import time import sys import mimetypes import smtplib ...

  9. Python 利用pytesser模块识别图像文字

    使用的是python的pytesser模块,原先想做的是图片中文识别,搞了一段时间了,在中文的识别上还是有很多问题,这里做记录分享. pytesser,OCR in Python using the ...

随机推荐

  1. JavaSE 软件工程师 认证考试试卷2

    JavaSE 软件工程师 认证考试试卷   笔试   考试时间150分钟 总分 100分   姓    名_______________________ 身份证号___________________ ...

  2. Breeze 部署 Kubernetes 1.12.1高可用集群

    今天看文章介绍了一个开源部署 K8S 的工具,有空研究下~ Github 地址: https://github.com/wise2c-devops/breeze

  3. 【HTML笔记】--- 内联元素间距问题及解决方案

    一.内联元素间距问题 在HTML实践中我们会发现,有时候内联元素之间会存在一定的间距,并且这间距和margin和padding无关.这是由编辑时的空白字符引起的,并且间距的大小受父元素的font-si ...

  4. FullCalendar:eventColor,eventBackgroundColor, eventBorderColor, and eventTextColor

    <!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <title>背景色設定< ...

  5. 【工具相关】Web-Sublime Text2新建立文件夹(二)

    紧接着上文. 一,打开Sublime Text2. 二,在桌面上新建立一个文件夹,html5. 三,打开html5如图所示.里面有我们刚刚建立好的文件. 四,把html5文件夹拖动到sublime2中 ...

  6. ADB命令行控制界面开关

    以下命令需要root权限:   svc命令     这个脚本在/system/bin目录下,这个命令可以用来控制电源管理,wifi开关,数据开关(就是上网流量) svc power stayon [t ...

  7. angular升级指南

    废话少说 上链接 angular 升级指南

  8. maven(九),install安装到本地仓库

    下载oracle驱动jar包 在maven中央仓库中,是没有oracle驱动jar包的.因为oracle是商业软件,其jar包不允许用作开源用途.从http://www.mvnrepository.c ...

  9. Spring 12 种 常用注解!

    1.声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller ...

  10. V4L2 driver -整体架构

    我的uvc开源地址:gitee-uvc 字符设备驱动程序核心:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用户空间. V4L2 驱动核心:主要是构建一个内核中标准视频设备驱动的框架 ...