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
,其中参数为self
和line
,其中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
,其中参数为self
和line
,其中line
是即将发送到远程主机的字节。在 3.2 版本中更改:添加了 context 参数。
在 3.4 版本中更改:该类现在支持使用
ssl.SSLContext.check_hostname
和服务器名称指示 的主机名检查(请参阅ssl.HAS_SNI
)。在 3.9 版本中更改:如果 timeout 参数设置为零,它将引发
ValueError
以防止创建非阻塞套接字。在 3.12 版本中更改:已删除已弃用的 keyfile 和 certfile 参数。
一个异常被定义为 poplib
模块的属性
另请参阅
- 模块
imaplib
标准的 Python IMAP 模块。
- 关于 Fetchmail 的常见问题解答
fetchmail POP/IMAP 客户端的常见问题解答收集了有关 POP3 服务器变体和 RFC 不兼容的信息,如果您需要编写基于 POP 协议的应用程序,这些信息可能很有用。
POP3 对象¶
所有 POP3 命令都由同名的小写方法表示;大多数返回服务器发送的响应文本。
POP3
实例具有以下方法
- POP3.set_debuglevel(level)¶
设置实例的调试级别。这控制打印的调试输出量。默认值
0
不产生调试输出。值1
产生适量的调试输出,通常每个请求一行。值2
或更高会产生最大量的调试输出,记录在控制连接上发送和接收的每一行。
- POP3.getwelcome()¶
返回 POP3 服务器发送的欢迎字符串。
- POP3.user(username)¶
发送 user 命令,响应应指示需要密码。
- 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)
在模块末尾,有一个测试部分,其中包含更广泛的用法示例。