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,则使用 995,即标准的 POP3-over-SSL 端口。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-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)
在模块的末尾,有一个测试部分,其中包含一个更广泛的用法示例。