在一些业务需求中,我们可能会需要python应用向我们的邮箱发送一些邮件,这个时候就需要使python的发送邮件功能。python内置了一个用于发送邮件的smtplib库,使用这个库可以用来发送邮件,接下来就随小编来了解一下这个库吧。
介绍
有些小伙伴可能会问了:python发送邮件功能有什么用?实际上发送邮件功能确实很有用,小编曾经接触过一个自动化测试的项目,它将项目部署在服务器上,运行结果就是通过邮件功能将测试报告发送到开发者的邮箱中的。当然,那个项目用的发送邮件的库并不是stmplib库这种简单的库,但是他们在使用上具有很多的相似之处,而且在轻量级的使用上stmplib库已经足够使用了。
对于一个发送邮件功能,只要可以发送邮件就足够了。而stmplib库就体现了这一点。
安装
stmplib 是 python 内置的库,不需要额外的安装。
使用
第一种方式:本地存在stmp服务器的情况下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = 'from@w3cschool.cn' # 发件人
receivers = ['429240967@qq.com'] # 收件人,可设置为你的QQ邮箱或者其他邮箱
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("W3Cschool教程", 'utf-8')
message['To'] = Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试' # 要充当标题的字符串
message['Subject'] = Header(subject, 'utf-8') # 将要充当标题的字符串写入邮件
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message.as_string())
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")
这种方式要求本地大有STMP服务器,这之后才可以用localhost作为stmp服务器地址,然而大多数情况下我们并没有搭建本地的stmp服务器,这时候我们可以采用下面这种方式。
第二种方式:使用第三方STMP服务器:
很多邮箱服务的提供者会附带提供stmp服务,比如国内常见的163邮箱和qq邮箱都有提供对应的stmp服务,我们可以使用这些stmp服务来实现发送邮件的功能(用以替代本地stmp服务)
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host="smtp.XXX.com" #设置服务器
mail_user="XXXX" #用户名
mail_pass="XXXXXX" #口令
sender = 'from@w3cschool.cn' # 发件人
receivers = ['429240967@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("W3Cschool教程", 'utf-8')
message['To'] = Header("测试", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")
注意:sender要修改成发件的用户名,不然会报错,另外,关于邮箱的口令并不是单纯的邮箱密码,详见下文:
第三方邮件服务器支持
很多用户并没有本地的stmp服务器,而是采用邮箱服务商提供的stmp服务器,以常见的QQ邮箱为例,我们可以使用QQ账号+@qq.com作为用户名,QQ密码作为密码访问qq邮箱,但在上述代码中并不能使用qq密码作为密码,这涉及到安全问题。通常stmp服务采用的密码是一个叫授权码的字符串,也就是说上述代码的mail_pass
实际上填写的是授权码。这个授权码可以到邮箱的设置中获取:
小结
其实收发邮件这样的功能,很多编程语言都有对应的模块,使用上也具有相似之处,代码也比较容易理解,唯一容易困扰新人的就是邮件授权码这个问题。以上就是python怎么发送邮件的内容。文内代码采用python3 教程的Python3 SMTP发送邮件一文,更多详细内容可以前往查看。