smtplib python_python:利用smtplib模块发送邮件

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

一、python对SMTP的支持

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

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

1、python对SMTP的支持

①email模块:负责构建邮件

②smtplib模块:负责发送邮件

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

1 >>> from smtplib importSMTP2 >>>help(SMTP)3 Help on class SMTP inmodule smtplib:4

5 classSMTP(builtins.object)6 | This class manages a connection to an SMTP orESMTP server.7 |SMTP Objects:8 |SMTP objects have the following attributes:9 |helo_resp10 | This is the message given by the server inresponse to the11 |most recent HELO command.12 |

13 |ehlo_resp14 | This is the message given by the server inresponse to the15 | most recent EHLO command. This isusually multiline.16 |

17 |does_esmtp18 | This is a True value _after you do an EHLO command_, ifthe19 | 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、纯文本格式的邮件

1 #coding=utf-8

2 importsmtplib3 from email.mime.text importMIMEText4 #发送纯文本格式的邮件

5 msg = MIMEText('hello,send by python_test...','plain','utf-8')6 #发送邮箱地址

7 sender = 'sender@163.com'

8 #邮箱授权码,非登陆密码

9 password = '123456'

10 #收件箱地址

11 receiver = 'receiver@qq.com'

12 #smtp服务器

13 smtp_server = 'smtp.163.com'

14 #发送邮箱地址

15 msg['From'] =sender16 #收件箱地址

17 msg['To'] =receiver18 #主题

19 msg['Subject'] = 'from IMYalost'

20 server = smtplib.SMTP(smtp_server,25)21

22 server.login(sender,password)23 server.sendmail(sender,receiver,msg.as_string())24 server.quit()

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

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

983980-20170817185410053-597055837.png

2、HTML格式的邮件

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

1 #coding=utf-8

2 importsmtplib3 from email.mime.text importMIMEText4 #发送HTML格式的邮件

5 msg = MIMEText('

人生苦短,我用python

','html','utf-8')

收到的邮件内容如下:

983980-20170817190150084-2022885875.png

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

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

3、邮件格式的关系

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

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

1 Message2 +-MIMEBase3 +-MIMEMultipart4 +-MIMENonMultipart5 +-MIMEMessage6 +-MIMEText7 +- MIMEImage

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

三、SMTP发送邮件之坑

1、协议之坑

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

983980-20170817193524365-2028694172.png

983980-20170817193600725-438535235.png

2、password之坑

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

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

3、各种报错

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当您使用Python的smtplib模块发送邮件时,可能会遇到以下错误之一: - smtplib.SMTPAuthenticationError: (535, '5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials ') - smtplib.SMTPServerDisconnected: Connection unexpectedly closed - smtplib.SMTPSenderRefused: (501, b'5.5.4 Invalid Address ') - smtplib.SMTPRecipientsRefused: {'recipient@example.com': (550, '5.1.1 The email account that you tried to reach does not exist. Please try\n5.1.1 double-checking the recipient\'s email address for typos or\n5.1.1 unnecessary spaces. Learn more at\n5.1.1 https://support.google.com/mail/?p=NoSuchUser ') 这些错误通常表示您的SMTP服务器拒绝了您的请求。这可能是由于以下原因之一: 1. 您提供的用户名和密码不正确:请确保您的用户名和密码正确,并且您已经启用了SMTP服务。如果您使用的是Google Mail,您需要在Google账户的安全选项中允许低安全性应用程序访问您的帐户。 2. 您的IP地址被SMTP服务器阻止:如果您在短时间内多次尝试发送电子邮件,SMTP服务器可能会阻止您的IP地址。请等待一段时间后再尝试发送电子邮件。 3. 您提供的发送者或收件人地址无效:请确保您提供的发送者和收件人地址是有效的,并且符合SMTP服务器的要求。 如果您仍然无法解决此问题,请尝试使用其他SMTP服务器或与您的SMTP服务器管理员联系以获取更多帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值