poplib — POP3 协议 Client 端

源代码: 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 协议。实例初始化时创建连接。如果Ellipsis* port ,则使用标准的 POP3 端口(110)。可选的 timeout *参数指定连接try的超时时间(以秒为单位)(如果未指定,将使用全局默认超时设置)。

用参数selfhostport引发auditing event poplib.connect

所有命令都将引发带有参数selflineauditing event poplib.putline,其中line是将要发送到远程主机的字节。

    • class * poplib. POP3_SSL(* host port = POP3_SSL_PORT keyfile = None certfile = None timeout = None context = None *)
    • 这是POP3的子类,该子类pass SSL 加密的套接字连接到服务器。如果未指定* port *,则使用 995 标准 SSL3-POP-port。 * timeout *与POP3构造函数一样。 * context *是一个可选的ssl.SSLContext对象,它允许将 SSL 配置选项,证书和私钥 Binding 到一个(可能长期存在)的结构中。请阅读Security considerations以获得最佳做法。
  • keyfile certfile context *的传统替代方案-它们可以分别指向 PEM 格式的私钥和证书链文件以进行 SSL 连接。

用参数selfhostport引发auditing event poplib.connect

所有命令都将引发带有参数selflineauditing event poplib.putline,其中line是将要发送到远程主机的字节。

在版本 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模块的属性定义为一个 exception:

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

See also

  • Module imaplib

  • 标准的 Python IMAP 模块。

  • 有关 Fetchmail 的常见问题

  • fetchmail POP/IMAPClient 端的 FAQ 收集有关 POP3 服务器版本和 RFC 不遵从性的信息,如果您需要基于 POP 协议编写应用程序,这可能会很有用。

POP3 Objects

所有 POP3 命令均以小写形式由相同名称的方法表示;大多数返回服务器发送的响应文本。

POP3实例具有以下方法:

  • POP3. set_debuglevel(级别)

    • 设置实例的调试级别。这控制打印的调试输出的数量。默认值0不产生调试输出。值1产生适度的调试输出,通常每个请求一行。 2或更高的值将产生最大的调试输出量,记录在控制连接上发送和接收的每一行。
  • POP3. getwelcome ( )

    • 返回 POP3 服务器发送的问候字符串。
  • POP3. capa ( )

    • 查询 RFC 2449中指定的服务器Function。以{'name': ['param'...]}的形式返回字典。

3.4 版的新Function。

  • 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 = None *)

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

    • try切换到 UTF-8 模式。如果成功,则返回服务器响应,否则返回error_proto。在 RFC 6856中指定。

3.5 版中的新Function。

  • POP3. stls(* context = None *)
    • 按照 RFC 2595中指定的活动连接启动 TLS 会话。仅在用户验证之前允许
  • context *参数是一个ssl.SSLContext对象,该对象允许将 SSL 配置选项,证书和私钥 Binding 到单个(可能长期存在)的结构中。请阅读Security considerations以获取最佳做法。

此方法支持passssl.SSLContext.check_hostname服务器名称指示(请参阅ssl.HAS_SNI)检查主机名。

3.4 版的新Function。

POP3_SSL的实例没有其他方法。该子类的接口与其父类相同。

POP3 Example

这是一个最小示例(不进行错误检查),该示例打开邮箱并检索和打印所有消息:

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)

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