python如何发送邮件?smtplib库介绍!

猿友 2021-07-12 14:17:40 浏览数 (2737)
反馈

在一些业务需求中,我们可能会需要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发送邮件一文,更多详细内容可以前往查看。


0 人点赞