Python 包含多个标准库模块,用于处理电子邮件和邮件服务器。

发送邮件

发送邮件使用 Python 的 smtplib 模块,通过 SMTP(简单邮件传输协议)服务器发送。实际使用根据电子邮件的复杂性和邮件服务器的设置有所不同,这里介绍的是通过 Google 的 Gmail 发送电子邮件的例子。

第一步是创建一个 SMTP 对象,每个对象用于与一个服务器的连接。

import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)

第一个参数是服务器的主机名,第二个参数是端口号。所使用的端口根据服务器的不同而有所不同。

接下来,我们需要执行几个步骤,以建立正确的连接来发送邮件。

server.ehlo()
server.starttls()
server.ehlo()

这些步骤根据你连接的服务器可能是可选的。ehlo() 用于 ESMTP 服务器,对于非 ESMTP 服务器,使用 helo() 替代。有关更多信息,请参见维基百科上的 SMTP 协议条目。starttls() 函数启动传输层安全模式(TLS),这是 Gmail 所要求的。其他邮件系统可能不使用此功能,或者可能不可用。

接下来,登录到服务器:

server.login("youremailusername", "password")

然后,发送邮件:

msg = "\nHello!"  # \n 用于分隔消息与头部(在此示例中我们忽略头部)
server.sendmail("you@gmail.com", "target@example.com", msg)

请注意,这只是一个简单的示例,它没有包括主题或任何其他邮件头。要添加这些内容,应该使用 email 包。

email

Python 的 email 包包含许多用于构建和解析电子邮件消息的函数,本节只介绍用于发送邮件的一小部分。

首先,我们只导入需要的,这样以后就不必使用完整的模块名称了。

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

接下来,我们构建一些基本的邮件头:

fromaddr = "you@gmail.com"
toaddr = "target@example.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Python email"

接下来,我们将邮件正文附加到 MIME 消息中:

body = "Python test mail"
msg.attach(MIMEText(body, 'plain'))

为了发送邮件,我们需要将对象转换为字符串,然后使用上述相同的步骤通过 SMTP 服务器发送邮件。

import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login("youremailusername", "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)

如果我们查看 text,可以看到它已经添加了所有必要的头部和结构,以确保邮件是 MIME 格式的。有关 MIME 的更多信息,请参见相关标准。

Last modified: Friday, 31 January 2025, 1:23 AM