跳转到内容

Python 编程/电子邮件

来自维基教科书,开放的书籍,开放的世界


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() 函数启动 传输层安全 模式,这是 Gmail 所要求的。其他邮件系统可能不使用此模式,或者此模式可能不可用。

接下来,登录到服务器

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

然后,发送邮件

msg = "\nHello!" # The \n separates the message from the headers (which we ignore for this example)
server.sendmail("[email protected]", "[email protected]", msg)

请注意,这是一个相当粗糙的示例,它不包括主题或任何其他标题。为此,应使用 email 包。

email

[编辑 | 编辑源代码]

Python 的 email 包包含许多用于撰写和解析电子邮件的类和函数,本节仅介绍一小部分用于发送电子邮件的类和函数。

我们首先只导入所需的类,这也可以让我们在以后避免使用完整的模块名。

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

然后,我们撰写一些基本的消息标题

fromaddr = "[email protected]"
toaddr = "[email protected]"
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)

如果查看文本,我们会发现它添加了所有必要的标题和结构,这些标题和结构对于 MIME 格式的电子邮件是必要的。有关此标准的更多详细信息,请参阅 MIME

我们示例消息的完整文本
>>> print text
Content-Type: multipart/mixed; boundary="===============1893313573=="
MIME-Version: 1.0
From: [email protected]
To: [email protected]
Subject: Python email

--===============1893313573==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

Python test mail
--===============1893313573==--


华夏公益教科书