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