一、为什么需要邮件发送模块
在现代社会中,邮件已经成为人们经常使用的一种通信方式。在自动化的信息处理过程中,我们可能会需要使用Python来自动发送邮件。Python作为一种高效的脚本语言,有着极为丰富的第三方库。邮件发送模块是其中比较常用的一种。
Python邮件发送模块可以帮助开发者快速构建邮件发送代码。通过模块提供的方法,可以方便地配置邮件发送的各种参数,如发件人、收件人、主题、正文、附件等。使开发者不必自己编写复杂的SMTP协议,就能够轻松实现邮件的发送。
二、Python邮件发送模块有哪些
根据一个叫做PyPI的网站提供的数据,目前有很多Python邮件发送模块可供选择。其中比较常用的模块有:smtplib、email、yagmail等。下面我们分别介绍这些模块的安装方法及基本用法。
三、smtplib模块
首先介绍的是smtplib模块。smtplib模块具有最基本的邮件发送功能,可以发送纯文本的邮件,也可以发送HTML格式的邮件。使用smtplib模块进行邮件发送需要先安装模块。smtplib模块是Python自带的标准模块,因此可以直接使用pip命令进行安装。
# 安装smtplib
pip install smtplib
接下来我们展示一个smtplib模块发送邮件的代码示例。此示例演示了如何发送一封纯文本的邮件。
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮件发送方的地址和密码(登陆SMTP服务器)
from_addr = 'xxx@163.com'
password = 'xxx'
# 邮件接收方的地址
to_addr = 'yyy@qq.com'
# 邮件 SMTP 服务器地址
smtp_server = 'smtp.163.com'
# 邮件正文内容
message = MIMEText('Python 邮件发送测试', 'plain', 'utf-8')
message['From'] = Header("发件人姓名", 'utf-8')
message['To'] = Header("收件人姓名", 'utf-8')
# 邮件主题
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
# 开启SSL加密,使用SMTP_SSL连接服务
smtpObj = smtplib.SMTP_SSL(smtp_server, 465)
# 登录SMTP服务器
smtpObj.login(from_addr, password)
# 发送邮件
smtpObj.sendmail(from_addr, to_addr, message.as_string())
# 退出
smtpObj.quit()
在运行该示例代码前,需要将from_addr、password、to_addr及smtp_server换成自己的发件人、密码、收件人和SMTP服务器的地址。
四、email模块
其次介绍的是email模块。email模块是Python标准库之一,提供了更多高级的邮件发送功能,支持发送HTML邮件、带附件的邮件,以及使用SMTP认证等。与smtplib模块不同,email模块不提供SMTP客户端功能,它只负责构造邮件。
使用email模块进行邮件发送也需要先安装该模块。同样地,email模块是Python自带的标准模块,因此可以直接使用pip命令进行安装。
# 安装email
pip install email
接下来我们展示一个email模块发送邮件的代码示例。此示例演示了如何发送一封带附件的邮件。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
# 邮件发送方的地址和密码(登陆SMTP服务器)
from_addr = 'xxx@163.com'
password = 'xxx'
# 邮件接收方的地址
to_addr = 'yyy@qq.com'
# 邮件主题
subject = 'Python SMTP 邮件测试'
# 构造文本内容
text_msg = MIMEText('Python 邮件发送测试', 'plain', 'utf-8')
# 构造附件
report_file = 'test_report.txt'
with open(report_file, 'rb') as fp:
attach = MIMEApplication(fp.read())
attach.add_header('Content-Disposition', 'attachment', filename=report_file)
# 构造邮件主体
msg = MIMEMultipart()
msg.attach(text_msg)
msg.attach(attach)
# 邮件参数设置
msg['From'] = Header("发件人姓名", 'utf-8')
msg['To'] = Header("收件人姓名", 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
# 邮件 SMTP 服务器地址
smtp_server = 'smtp.163.com'
# 开启SSL加密,使用SMTP_SSL连接服务
smtpObj = smtplib.SMTP_SSL(smtp_server, 465)
# 登录SMTP服务器
smtpObj.login(from_addr, password)
# 发送邮件
smtpObj.sendmail(from_addr, to_addr, msg.as_string())
# 退出
smtpObj.quit()
在运行该示例代码前,需要将from_addr、password、to_addr、subject、report_file及smtp_server换成自己的发件人、密码、收件人、主题、附件和SMTP服务器的地址。
五、yagmail模块
最后介绍的是yagmail模块。yagmail模块是一个Python邮件发送模块,它使用简单、易用,支持发送HTML邮件和带附件的邮件。
yagmail模块不是Python自带的标准模块,使用前需要先安装。安装yagmail模块可以使用pip命令进行安装。
# 安装yagmail
pip install yagmail
下面我们展示一个yagmail模块发送邮件的代码示例。此示例演示了如何发送一封HTML格式的邮件。
import yagmail
# 邮件发送方的地址和密码
from_addr = 'xxx@163.com'
password = 'xxx'
# 邮件接收方的地址
to_addr = 'yyy@qq.com'
# 邮件主题
subject = 'Python yagmail 邮件测试'
# 邮件正文
contents = ['Python HTML邮件发送测试
',
'',
'']
# 图片附件
chart_file = 'chart.png'
chart_cid = 'chart'
# yagmail发送邮件
yag = yagmail.SMTP(from_addr, password)
yag.send(to_addr, subject, contents, chart_file, chart_cid=chart_cid)
yag.close()
在运行该示例代码前,需要将from_addr、password、to_addr、subject、contents、chart_file换成自己的发件人、密码、收件人、主题、正文、图片附件的文件名。注意:该示例中,需要将chart图片作为附件发送,并使用cid(Content-ID)指定附件的名称,以便在邮件正文中引用。
六、总结
Python邮件发送模块是Python开发中常用的一种模块,它可以帮助开发者快速、方便地实现邮件发送的功能。Python的第三方库很丰富,根据自己的需求,可以选择适合的邮件发送模块进行使用。在代码的编写过程中,需要根据实际情况进行邮件参数的设置,以保证邮件可以正常发送。