SMTP 的全称是 Simple Mail Transfer Protocol,意为简单邮件传输协议,主要用来发送电子邮件;IMAP 的全称是 Internet Mail Access Protocol,意为 Internet 邮件访问协议,主要用来收取和下载电子邮件。
本文用 Python 通过 SMTP 实现发送电子邮件,要用到以下模块:smtplib、email。
本文内容基于 Python 3.7,邮箱服务使用腾讯企业邮箱为例。如果你使用的是其它环境,操作应该大同小异。
本文地址:https://www.jeddd.com/article/python-smtp-imap-emails.html开始前
首先你要搞清楚你的邮箱的 SMTP 服务器地址和加密方式,当然别忘了打开 SMTP 服务。腾讯企业邮箱的设置如图所示:
发送邮件一共要经历以下几个步骤:连接并登陆 SMTP 服务器、构建好要发送的邮件内容、发送邮件。下面依次讲解。
连接登陆 SMTP
import smtplib
# 连接 SMTP 服务器并登陆
smtp = smtplib.SMTP_SSL('SMTP服务器地址', port=465)
smtp.login('用户名', '密码')
# TODO: 构建要发送的邮件内容
# TODO: 发送邮件
你不需要知道 smtplib 其内部是如何工作的,只需要了解使用方法即可。在以上代码中,有一些需要注意的地方:
由于腾讯企业邮箱使用 SSL 加密方法,因此需要调用 smtplib 的 SMTP_SSL()
方法并提供 465 端口号。
login() 方法用于登陆到 SMTP 服务器,传入的第一个参数为邮件地址字符串,第二个参数为密码字符串。若 login() 方法返回代码 235 则表示登陆成功,否则会抛出异常。登陆成功的返回结果如图所示(IDLE 截图):
本文地址:https://www.jeddd.com/article/python-smtp-imap-emails.html
构建邮件内容
邮件格式遵循一定的规范,它称作 MIME(多用途互联网邮件扩展类型)。如果你对此不熟悉,也没有关系,不影响操作。我们使用 Python 内置的 email 模块中的 MIME 模块来构建一个文本邮件对象,代码如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 连接 SMTP 服务器并登陆
smtp = smtplib.SMTP_SSL('SMTP服务器地址', port=465)
smtp.login('用户名', '密码')
# 构建要发送的邮件内容
msg = MIMEText('这里是正文内容~', 'plain', 'utf-8')
msg['Subject'] = Header('响亮的标题', 'utf-8')
msg['From'] = Header("发件人名称", 'utf-8')
msg['To'] = Header("收件人名称", 'utf-8')
# TODO: 发送邮件
注意,第 2、3 行又引入了两个库!请勿遗漏。
发送邮件
发送邮件使用 SMTP 对象的 sendmail()
方法,该方法需要三个参数,分别是发件人(自己)的邮箱地址、收件人的邮箱地址、邮件内容。
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 连接 SMTP 服务器并登陆
smtp = smtplib.SMTP_SSL('SMTP服务器地址', port=465)
smtp.login('用户名', '密码')
# 构建要发送的邮件内容
msg = MIMEText('这里是正文内容~', 'plain', 'utf-8')
msg['Subject'] = Header('响亮的标题', 'utf-8')
msg['From'] = Header("发件人名称", 'utf-8')
msg['To'] = Header("收件人名称", 'utf-8')
# 发送邮件
smtp.sendmail('发件人地址', '收件人地址', msg.as_string())
smtp.close()
第 16 行中,sendmail() 方法的第三个参数应为邮件内容,也就是我们在上一步中构建的邮件对象的字符串表示。调用邮件对象的 as_string()
方法得到这个字符串。
执行代码
我的完整代码截图如下:
执行代码,成功收到邮件。
如果你没有收到邮件,不妨看看是不是在垃圾箱里面。
本文地址:https://www.jeddd.com/article/python-smtp-imap-emails.html