本文记录了 Python 使用内置 smtplib 模块和内置 email 包发送纯文本电子邮件的相关代码。
前言
项目中需要一个消息转发服务,电子邮件转发算是一个通用且广泛的选择。
Python 自带的 smtplib 和 email 库支持发送纯文本、带有图片、带有附件的电子邮件。
因项目实际所需,所以本文仅介绍使用 Python 发送纯文本电子邮件的方法。
所用 Python 版本 : Python 3.11.0
代码讲解
此部分正式开始讲解 Python 发送纯文本电子邮件的代码。
逐段讲解
-
首先导入发送电子邮件的所需模块
import smtplib from email.message import EmailMessage
-
然后构造电子邮件的本体信息
msg = EmailMessage() msg['Subject'] = 'This is the title of the email' # 设置电子邮件的标题 msg['From'] = 'dancying_sender@163.com' # 设置电子邮件的发件人信息,建议为邮件格式 msg['To'] = 'dancying_recipient@163.com' # 设置电子邮件的收件人信息,邮件格式 msg.set_content('This is the body of the email.') # 设置电子邮件的正文内容
-
最后使用 SMTP 协议发送电子邮件至收件人邮箱
s = smtplib.SMTP_SSL(host='smtp.163.com', port=465) # 连接至目标 SMTP 服务器 s.login(user='dancying_sender@163.com', password='QWERTYUIOPASDFGH') # 使用发件人的账号密码登录邮件服务器 s.send_message(msg) # 执行发送邮件操作 s.quit() # 断开与 SMTP 服务器的连接
如果使用 SMTP 服务器的 25 端口,则需要换成
smtplib.SMTP()
方法连接 SMTP 服务器
完整代码
- 将以上代码组合可得到完整代码,根据实际情况修改即可使用
import smtplib from email.message import EmailMessage msg = EmailMessage() msg['Subject'] = 'This is the title of the email' # 设置电子邮件的标题 msg['From'] = 'dancying_sender@163.com' # 设置电子邮件的发件人信息,建议为邮件格式 msg['To'] = 'dancying_recipient@163.com' # 设置电子邮件的收件人信息,邮件格式 msg.set_content('This is the body of the email.') # 设置电子邮件的正文内容 s = smtplib.SMTP_SSL(host='smtp.163.com', port=465) # 连接至目标 SMTP 服务器 s.login(user='dancying_sender@163.com', password='QWERTYUIOPASDFGH') # 使用发件人的账号密码登录邮件服务器 s.send_message(msg) # 执行发送邮件操作 s.quit() # 断开与 SMTP 服务器的连接
总结
使用 Python 发送电子邮件上手后还是挺简单的,至于 SMTP 服务器的配置步骤不属于本文内容范畴。
在我看来,代码中需要注意的点有两个:
msg['From']
的值理论上可以随便写,但如果不符合邮件地址格式,邮件可能会被个别邮箱拒收(如 Foxmail)- 需要清楚
smtplib.SMTP_SSL()
和smtplib.SMTP()
的区别