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

在 2.6 版中进行了更改:添加了“超时”。

    • class * poplib. POP3_SSL(* host * [,* port * [,* keyfile * [,* certfile *]]])
    • 这是POP3的子类,该子类pass SSL 加密的套接字连接到服务器。如果未指定* port *,则使用 995 标准 SSL3-POP-port。 * keyfile certfile *也是可选的-它们可以包含 PEM 格式的私钥和用于 SSL 连接的证书链文件。

2.4 版的新Function。

poplib模块的属性定义为一个 exception:

  • exception poplib. error_proto
    • 此模块的任何错误引发异常(未捕获socket模块的错误)。异常的原因作为字符串传递给构造函数。

See also

  • Module imaplib

  • 标准的 Python IMAP 模块。

  • 有关 Fetchmail 的常见问题

  • 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)
  • POP3. list([* which *])

    • 请求消息列表,结果格式为(response, ['mesg_num octets', ...], octets)。如果设置了哪个,它就是要列出的消息。
  • POP3. retr(* which *)

    • 检索整个消息号* which *,并设置其可见标志。结果的格式为(response, ['line', ...], octets)
  • POP3. dele(* which *)

    • 标记消息号删除。在大多数服务器上,实际上直到 QUIT 才执行删除操作(主要 exception 是 Eudora QPOP,它pass在任何断开连接时进行挂起的删除来故意违反 RFC)。
  • POP3. rset ( )

    • 删除邮箱的所有删除标记。
  • POP3. noop ( )

    • 没做什么。可能用作保持活动状态。
  • POP3. quit ( )

    • 签核:提交更改,解锁邮箱,断开连接。
  • POP3. top(哪个多少)

    • 检索消息 Headers 加上消息号* which 的 Headers 之后的消息的多少*行。结果的格式为(response, ['line', ...], octets)

与 RETR 命令不同,此方法使用的 POP3 TOP 命令不设置邮件的 seeed 标志。不幸的是,TOP 在 RFC 中指定不明确,并且在品牌外服务器中经常被破坏。信任它之前,请先对将要使用的 POP3 服务器测试此方法。

  • POP3. uidl([* which *])
    • 返回消息摘要(唯一 ID)列表。如果指定了哪个,则 result 包含该消息的唯一 ID,格式为'response mesgnum uid,否则结果为 list (response, ['mesgnum uid', ...], octets)

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

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