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 服务器的实现往往更好。

可用性:不支持 Emscripten,不支持 WASI。

此模块在 WebAssembly 平台 wasm32-emscriptenwasm32-wasi 上不可用或无法工作。有关更多信息,请参阅 WebAssembly 平台

poplib 模块提供了两个类

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

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

使用参数 selfhostport 引发 审计事件 poplib.connect

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

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

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

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

使用参数 selfhostport 引发 审计事件 poplib.connect

所有命令都将使用参数 selfline 引发 审计事件 poplib.putline,其中 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)

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

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,形式为 '响应 邮件编号 唯一 ID,否则结果是列表 (响应, ['邮件编号 唯一 ID', ...], 字节数)

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)

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