poplib — POP3 协议客户端

源代码: Lib/poplib.py


这个模块定义了一个类 POP3,它封装了与 POP3 服务器的连接,并实现了 RFC 1939 中定义的协议。POP3 类支持 RFC 1939 中的最小和可选命令集。POP3 类还支持 RFC 2595 中引入的 STLS 命令,以便在已建立的连接上启用加密通信。

此外,该模块还提供了一个类 POP3_SSL,它支持连接到使用 SSL 作为底层协议层的 POP3 服务器。

请注意,POP3 虽然被广泛支持,但已过时。POP3 服务器的实现质量差异很大,而且很多都很差。如果您的邮件服务器支持 IMAP,您最好使用 imaplib.IMAP4 类,因为 IMAP 服务器往往实现得更好。

可用性:不是 WASI。

此模块在 WebAssembly 上不起作用或不可用。有关更多信息,请参阅WebAssembly 平台

poplib 模块提供了两个类

class poplib.POP3(host, port=POP3_PORT[, timeout])

此类实现实际的 POP3 协议。连接在实例初始化时创建。如果省略 port,则使用标准的 POP3 端口 (110)。可选的 timeout 参数指定连接尝试的超时时间(以秒为单位)(如果未指定,将使用全局默认超时设置)。

使用参数 self, host, port 引发一个审计事件 poplib.connect

所有命令都将引发一个审计事件 poplib.putline,其中参数为 selfline,其中 line 是即将发送到远程主机的字节。

在 3.9 版本中更改:如果 timeout 参数设置为零,它将引发 ValueError 以防止创建非阻塞套接字。

class poplib.POP3_SSL(host, port=POP3_SSL_PORT, *, timeout=None, context=None)

这是 POP3 的子类,它通过 SSL 加密套接字连接到服务器。如果未指定 port,则使用标准的基于 SSL 的 POP3 端口 995。timeout 的工作方式与 POP3 构造函数中相同。context 是一个可选的 ssl.SSLContext 对象,它允许将 SSL 配置选项、证书和私钥捆绑到一个(可能长期存在的)结构中。请阅读 安全考虑 以获得最佳实践。

使用参数 self, host, port 引发一个审计事件 poplib.connect

所有命令都将引发一个审计事件 poplib.putline,其中参数为 selfline,其中 line 是即将发送到远程主机的字节。

在 3.2 版本中更改:添加了 context 参数。

在 3.4 版本中更改:该类现在支持使用 ssl.SSLContext.check_hostname服务器名称指示 的主机名检查(请参阅 ssl.HAS_SNI)。

在 3.9 版本中更改:如果 timeout 参数设置为零,它将引发 ValueError 以防止创建非阻塞套接字。

在 3.12 版本中更改:已删除已弃用的 keyfilecertfile 参数。

一个异常被定义为 poplib 模块的属性

exception poplib.error_proto

从该模块发生的任何错误(不捕获来自 socket 模块的错误)引发的异常。异常的原因作为字符串传递给构造函数。

另请参阅

模块 imaplib

标准的 Python IMAP 模块。

关于 Fetchmail 的常见问题解答

fetchmail POP/IMAP 客户端的常见问题解答收集了有关 POP3 服务器变体和 RFC 不兼容的信息,如果您需要编写基于 POP 协议的应用程序,这些信息可能很有用。

POP3 对象

所有 POP3 命令都由同名的小写方法表示;大多数返回服务器发送的响应文本。

POP3 实例具有以下方法

POP3.set_debuglevel(level)

设置实例的调试级别。这控制打印的调试输出量。默认值 0 不产生调试输出。值 1 产生适量的调试输出,通常每个请求一行。值 2 或更高会产生最大量的调试输出,记录在控制连接上发送和接收的每一行。

POP3.getwelcome()

返回 POP3 服务器发送的欢迎字符串。

POP3.capa()

按照 RFC 2449 中的规定查询服务器的功能。返回一个 {'name': ['param'...] 形式的字典。

在 3.4 版本中添加。

POP3.user(username)

发送 user 命令,响应应指示需要密码。

POP3.pass_(password)

发送密码,响应包括消息计数和邮箱大小。注意:服务器上的邮箱会被锁定,直到调用 quit()

POP3.apop(user, secret)

使用更安全的 APOP 身份验证登录 POP3 服务器。

POP3.rpop(user)

使用 RPOP 身份验证(类似于 UNIX r 命令)登录 POP3 服务器。

POP3.stat()

获取邮箱状态。结果是一个包含 2 个整数的元组:(消息数量, 邮箱大小)

POP3.list([which])

请求消息列表,结果的形式为 (响应, ['消息编号 字节数', ...], 字节数)。如果设置了 *which*,则它是要列出的消息。

POP3.retr(which)

检索消息编号 *which* 的完整消息,并设置其已读标志。结果的形式为 (响应, ['行', ...], 字节数)

POP3.dele(which)

标记消息编号 *which* 以进行删除。在大多数服务器上,删除操作实际上不会执行,直到 QUIT 命令(主要例外是 Eudora QPOP,它故意违反 RFC,在任何断开连接时执行待删除操作)。

POP3.rset()

删除邮箱的所有删除标记。

POP3.noop()

不执行任何操作。可以用作保持连接的活动状态。

POP3.quit()

注销:提交更改、解锁邮箱、断开连接。

POP3.top(which, howmuch)

检索消息编号为 *which* 的消息头以及消息头后 *howmuch* 行的内容。结果的形式为 (响应, ['行', ...], 字节数)

此方法使用的 POP3 TOP 命令与 RETR 命令不同,它不会设置消息的已读标志;不幸的是,TOP 在 RFC 中定义不明确,并且在非品牌服务器中经常出现问题。在使用此方法之前,请手动针对您将使用的 POP3 服务器进行测试。

POP3.uidl(which=None)

返回消息摘要(唯一 ID)列表。如果指定了 *which*,则结果包含该消息的唯一 ID,形式为 '响应 消息编号 uid',否则结果为列表 (响应, ['消息编号 uid', ...], 字节数)

POP3.utf8()

尝试切换到 UTF-8 模式。如果成功,则返回服务器响应;如果失败,则引发 error_proto 异常。在 RFC 6856 中指定。

在 3.5 版本中添加。

POP3.stls(context=None)

按照 RFC 2595 中的规定,在活动连接上启动 TLS 会话。这只能在用户身份验证之前进行。

*context* 参数是一个 ssl.SSLContext 对象,允许将 SSL 配置选项、证书和私钥捆绑到一个单独的(可能长期存在的)结构中。请阅读 安全注意事项 以了解最佳实践。

此方法支持通过 ssl.SSLContext.check_hostname 进行主机名检查和 *服务器名称指示* (请参阅 ssl.HAS_SNI)。

在 3.4 版本中添加。

POP3_SSL 的实例没有额外的方法。此子类的接口与其父类相同。

POP3 示例

这是一个最小的示例(没有错误检查),它打开一个邮箱并检索和打印所有消息

import getpass, poplib

M = poplib.POP3('localhost')
M.user(getpass.getuser())
M.pass_(getpass.getpass())
numMessages = len(M.list()[1])
for i in range(numMessages):
    for j in M.retr(i+1)[1]:
        print(j)

在模块末尾,有一个测试部分,其中包含更广泛的用法示例。