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 参数指定连接尝试的超时时间(以秒为单位)(如果未指定,将使用全局默认超时设置)。

使用参数 selfhostport 触发 审计事件 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,则使用 995,即标准的 POP3-over-SSL 端口。timeout 的工作方式与 POP3 构造函数中相同。context 是一个可选的 ssl.SSLContext 对象,它允许将 SSL 配置选项、证书和私钥捆绑到一个单一的(可能是长期存在的)结构中。请阅读 安全注意事项 以了解最佳实践。

使用参数 selfhostport 触发 审计事件 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-commands)登录 POP3 服务器。

POP3.stat()

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

POP3.list([which])

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

POP3.retr(which)

检索整个消息号 which,并设置其已读标记。结果形式为 (响应, ['line', ...], 八位字节)

POP3.dele(which)

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

POP3.rset()

移除邮箱的任何删除标记。

POP3.noop()

什么也不做。可能用作保持连接。

POP3.quit()

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

POP3.top(which, howmuch)

检索消息号 which 的消息头以及消息头之后 howmuch 行的消息。结果形式为 (响应, ['line', ...], 八位字节)

此方法使用的 POP3 TOP 命令与 RETR 命令不同,它不设置消息的已读标记;不幸的是,TOP 在 RFC 中规范不佳,并且在非主流服务器中经常出现问题。在使用此方法之前,请针对您将使用的 POP3 服务器手动测试它。

POP3.uidl(which=None)

返回消息摘要(唯一 ID)列表。如果指定了 which,结果包含该消息的唯一 ID,形式为 'response mesgnum uid',否则结果是列表 (响应, ['mesgnum 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)

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