21.14. 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服务器往往会更好地实现。
poplib
模块提供两个类:
-
class
poplib.
POP3
(host, port=POP3_PORT[, timeout])¶ 这个类实现实际的POP3协议。实例初始化时创建连接。如果省略 port,则使用标准POP3端口(110)。可选的 timeout 参数指定连接尝试的超时(以秒为单位)(如果未指定,将使用全局默认超时设置)。
-
class
poplib.
POP3_SSL
(host, port=POP3_SSL_PORT, keyfile=None, certfile=None, timeout=None, context=None)¶ 这是
POP3
的子类,通过SSL加密的套接字连接到服务器。如果未指定 port,995,则使用标准的POP3 over SSL端口。 timeout 在POP3
构造函数中工作。 context 是一个可选的ssl.SSLContext
对象,允许将SSL配置选项,证书和私钥捆绑到单个(可能长期)结构中。请阅读 安全注意事项 的最佳做法。keyfile 和 certfile 是 context 的传统替代品 - 它们可以分别指向用于SSL连接的PEM格式的私钥和证书链文件。
在 3.2 版更改: context 参数添加。
在 3.4 版更改: 该类现在支持使用
ssl.SSLContext.check_hostname
和 服务器名称指示 进行主机名检查(请参阅ssl.HAS_SNI
)。3.6 版后已移除: keyfile 和 certfile 不赞成使用 context。请使用
ssl.SSLContext.load_cert_chain()
,或者让ssl.create_default_context()
为您选择系统的受信任的CA证书。
一个例外被定义为 poplib
模块的属性:
参见
- 模块
imaplib
标准的Python IMAP模块。
- 有关Fetchmail的常见问题
fetchmail POP/IMAP客户端的常见问题解答收集有关POP3服务器变体和RFC不符合的信息,如果您需要基于POP协议编写应用程序,这可能是有用的。
21.14.1. POP3对象¶
所有POP3命令由相同名称的方法表示,小写;最多返回服务器发送的响应文本。
POP3
实例具有以下方法:
-
POP3.
set_debuglevel
(level)¶ 设置实例的调试级别。这控制打印的调试输出量。默认值
0
不产生调试输出。1
的值产生中等量的调试输出,通常每个请求都有一行。2
或更高的值产生最大量的调试输出,记录在控制连接上发送和接收的每行。
-
POP3.
getwelcome
()¶ 返回由POP3服务器发送的问候字符串。
-
POP3.
user
(username)¶ 发送用户命令,响应应该指示需要密码。
-
POP3.
pass_
(password)¶ 发送密码,响应包括邮件数量和邮箱大小。注意:服务器上的邮箱被锁定,直到调用
quit()
。
-
POP3.
apop
(user, secret)¶ 使用更安全的APOP身份验证登录POP3服务器。
-
POP3.
rpop
(user)¶ 使用RPOP认证(类似于UNIX r命令)登录到POP3服务器。
-
POP3.
stat
()¶ 获取邮箱状态。结果是2个整数的元组:
(message count, mailbox size)
。
-
POP3.
list
([which])¶ 请求消息列表,结果以
(response, ['mesg_num octets', ...], octets)
的形式。如果设置了 which,则它是要列出的消息。
-
POP3.
retr
(which)¶ 检索整个消息号 which,并设置其看到的标志。结果为
(response, ['line', ...], octets)
格式。
-
POP3.
dele
(which)¶ 标记消息号 which 以进行删除。在大多数服务器上,删除直到QUIT才被实际执行(主要例外是Eudora QPOP,它通过在任何断开连接上进行未决删除而故意违反RFC)。
-
POP3.
rset
()¶ 删除邮箱的所有删除标记。
-
POP3.
noop
()¶ 没做什么。可能用作保持活动。
-
POP3.
quit
()¶ 注销:提交更改,解锁邮箱,删除连接。
-
POP3.
top
(which, howmuch)¶ 检索消息标头加上消息的 howmuch 行在消息号 which 的标头之后。结果以
(response, ['line', ...], octets)
的形式。与RETR命令不同,此方法使用的POP3 TOP命令不设置消息的见过标志;不幸的是,TOP在RFC中指定不好,并且经常在非品牌服务器中断开。用手动测试此方法对您将使用的POP3服务器在信任它之前。
-
POP3.
uidl
(which=None)¶ 返回消息摘要(唯一ID)列表。如果指定了 which,则结果包含该消息的唯一标识,格式为
'response mesgnum uid
,否则结果为list(response, ['mesgnum uid', ...], octets)
。
-
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
的实例没有其他方法。此子类的接口与其父类相同。
21.14.2. 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)
在模块的结尾,有一个测试部分,其中包含更广泛的使用示例。