Python:利用smtplib模块发送邮件

本文转自:https://www.cnblogs.com/imyalost/p/7383901.html,并对原文进行精简,仅供自己学习。

一、python对SMTP的支持

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

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

他几种请参考原文链接。

1、python对SMTP的支持

①email模块:负责构建邮件

②smtplib模块:负责发送邮件

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

from smtplib import SMTP
help(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():结束当前会话

二、发送纯文本格式的邮件

# coding=utf-8

import smtplib
from email.mime.text import MIMEText

# 发送纯文本格式的邮件
msg = MIMEText('人生苦短,我用Python!','plain','utf-8')

sender = '[email protected]'    #发送邮箱地址

password = '123456'    #邮箱授权码,非登陆密码!非登录密码!此处见后面讲解!

receiver = '[email protected]'    #收件箱地址

smtp_server = 'smtp.163.com'    #smtp服务器,根据发件邮箱来设定,示例代码用的网易邮箱

msg['From'] = sender    #发送邮箱地址

msg['To'] = receiver    #收件箱地址

msg['Subject'] = 'from IMYalost'    #邮件主题

smtp = smtplib.SMTP()    # 连接邮箱服务器
smtp.connect(smtp_server)  

server.login(sender,password)    #登陆邮箱

server.sendmail(sender,receiver,msg.as_string())    #发送邮件

server.quit()    #结束会话

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

三、SMTP发送邮件之坑

1、协议之坑

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

如下是网易邮箱的设置!

2、password之坑

我们常认为 login(user,password) 方法中的参数password是邮箱登录密码,然而并不是的,这个是邮箱的授权码,非邮箱登陆密码!!要先在邮箱中设置授权码,一般邮箱默认是不开启授权码的。

如下是网易邮箱的设置!

3、各种报错

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

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

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/SCF_1104/article/details/83615014
今日推荐