On this page
20.9. poplib — POP3 协议 Client 端
源代码: Lib/poplib.py
该模块定义了一个类POP3,该类封装了与 POP3 服务器的连接并实现了 RFC 1725中定义的协议。 POP3类同时支持最小和可选命令集。此外,此模块提供了POP3_SSL类,该类提供对连接到使用 SSL 作为基础协议层的 POP3 服务器的支持。
请注意,尽管 POP3 得到了广泛支持,但已过时。 POP3 服务器的实现质量差异很大,而且太多都太差了。如果您的邮件服务器支持 IMAP,则最好使用imaplib.IMAP4类,因为 IMAP 服务器往往会得到更好的实现。
poplib模块提供了两个类:
-
- class *
poplib.
POP3
(* host * [,* port * [,* timeout *]])
- 此类实现实际的 POP3 协议。实例初始化时创建连接。如果Ellipsis* port ,则使用标准的 POP3 端口(110)。可选的 timeout *参数指定连接try的超时时间(以秒为单位)(如果未指定,将使用全局默认超时设置)。
- class *
在 2.6 版中进行了更改:添加了“超时”。
-
- class *
poplib.
POP3_SSL
(* host * [,* port * [,* keyfile * [,* certfile *]]])
- 这是POP3的子类,该子类pass SSL 加密的套接字连接到服务器。如果未指定* port *,则使用 995 标准 SSL3-POP-port。 * keyfile 和 certfile *也是可选的-它们可以包含 PEM 格式的私钥和用于 SSL 连接的证书链文件。
- class *
2.4 版的新Function。
poplib模块的属性定义为一个 exception:
- exception
poplib.
error_proto
- 此模块的任何错误引发异常(未捕获socket模块的错误)。异常的原因作为字符串传递给构造函数。
See also
Module imaplib
标准的 Python IMAP 模块。
fetchmail POP/IMAPClient 端的 FAQ 收集有关 POP3 服务器版本和 RFC 不遵从性的信息,如果您需要基于 POP 协议编写应用程序,这可能会很有用。
20.9.1. POP3 对象
所有 POP3 命令均以小写形式由相同名称的方法表示;大多数返回服务器发送的响应文本。
POP3实例具有以下方法:
POP3.
set_debuglevel
(级别)- 设置实例的调试级别。这控制打印的调试输出的数量。默认值
0
不产生调试输出。值1
产生适度的调试输出,通常每个请求一行。2
或更高的值将产生最大的调试输出量,记录在控制连接上发送和接收的每一行。
- 设置实例的调试级别。这控制打印的调试输出的数量。默认值
POP3.
getwelcome
( )- 返回 POP3 服务器发送的问候字符串。
POP3.
user
(用户名)- 发送用户命令,响应应指示要求 Importing 密码。
POP3.
pass_
(* password *)- 发送密码,响应包括邮件数和邮箱大小。注意:服务器上的邮箱被锁定,直到调用
quit()
为止。
- 发送密码,响应包括邮件数和邮箱大小。注意:服务器上的邮箱被锁定,直到调用
POP3.
apop
(* user , secret *)- 使用更安全的 APOP 身份验证登录到 POP3 服务器。
POP3.
rpop
(* user *)- 使用 RPOP 身份验证(类似于 UNIX r 命令)登录 POP3 服务器。
POP3.
stat
( )- 获取邮箱状态。结果是 2 个整数的 Tuples:
(message count, mailbox size)
。
- 获取邮箱状态。结果是 2 个整数的 Tuples:
POP3.
list
([* which *])- 请求消息列表,结果格式为
(response, ['mesg_num octets', ...], octets)
。如果设置了哪个,它就是要列出的消息。
- 请求消息列表,结果格式为
POP3.
retr
(* which *)- 检索整个消息号* which *,并设置其可见标志。结果的格式为
(response, ['line', ...], octets)
。
- 检索整个消息号* which *,并设置其可见标志。结果的格式为
POP3.
dele
(* which *)- 标记消息号删除。在大多数服务器上,实际上直到 QUIT 才执行删除操作(主要 exception 是 Eudora QPOP,它pass在任何断开连接时进行挂起的删除来故意违反 RFC)。
POP3.
rset
( )- 删除邮箱的所有删除标记。
POP3.
noop
( )- 没做什么。可能用作保持活动状态。
POP3.
quit
( )- 签核:提交更改,解锁邮箱,断开连接。
POP3.
top
(哪个,多少)- 检索消息 Headers 加上消息号* which 的 Headers 之后的消息的多少*行。结果的格式为
(response, ['line', ...], octets)
。
- 检索消息 Headers 加上消息号* which 的 Headers 之后的消息的多少*行。结果的格式为
与 RETR 命令不同,此方法使用的 POP3 TOP 命令不设置邮件的 seeed 标志。不幸的是,TOP 在 RFC 中指定不明确,并且在品牌外服务器中经常被破坏。信任它之前,请先对将要使用的 POP3 服务器测试此方法。
POP3.
uidl
([* which *])- 返回消息摘要(唯一 ID)列表。如果指定了哪个,则 result 包含该消息的唯一 ID,格式为
'response mesgnum uid
,否则结果为 list(response, ['mesgnum uid', ...], octets)
。
- 返回消息摘要(唯一 ID)列表。如果指定了哪个,则 result 包含该消息的唯一 ID,格式为
POP3_SSL的实例没有其他方法。该子类的接口与其父类相同。
20.9.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
在模块的最后,有一个测试部分,其中包含更广泛的用法示例。