poplib ---POP3协议客户端

源代码: Lib/poplib.py


此模块定义一个类, POP3 ,它封装到POP3服务器的连接并实现在中定义的协议。 RFC 1939 . 这个 POP3 类同时支持来自的最小命令集和可选命令集 RFC 1939 . 这个 POP3 类还支持 STLS 命令引入 RFC 2595 在已建立的连接上启用加密通信。

此外,此模块还提供一个类 POP3_SSL 它支持连接到使用SSL作为底层协议层的POP3服务器。

请注意,虽然pop3得到了广泛支持,但已过时。pop3服务器的实现质量差异很大,而且太多的服务器都很差。如果您的邮件服务器支持IMAP,您最好使用 imaplib.IMAP4 类,因为IMAP服务器往往更好地实现。

这个 poplib 模块提供两个类:

class poplib.POP3(host, port=POP3_PORT[, timeout])

这个类实现了实际的pop3协议。连接是在初始化实例时创建的。如果 port 如果省略,则使用标准的POP3端口(110)。可选的 timeout 参数指定连接尝试的超时(以秒为单位)(如果未指定,将使用全局默认超时设置)。

提出一个 auditing event poplib.connect 带着论据 selfhostport .

提出一个 auditing event poplib.putline 带着论据 selfline .

在 3.9 版更改: 如果 超时 参数设置为零,它将引发 ValueError 以防止创建非阻塞套接字。

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配置选项、证书和私钥绑定到单个(可能是长期存在的)结构中。请阅读 安全注意事项 最佳实践。

关键文件证书文件 是传统的替代品 context -它们可以分别指向用于SSL连接的PEM格式的私钥和证书链文件。

提出一个 auditing event poplib.connect 带着论据 selfhostport .

提出一个 auditing event poplib.putline 带着论据 selfline .

在 3.2 版更改: context 参数已添加。

在 3.4 版更改: 类现在支持主机名检查 ssl.SSLContext.check_hostname服务器名称指示 (见 ssl.HAS_SNI

3.6 版后已移除: 关键文件证书文件 被否决,赞成 context . 请使用 ssl.SSLContext.load_cert_chain() 相反,还是让 ssl.create_default_context() 为您选择系统的可信CA证书。

在 3.9 版更改: 如果 超时 参数设置为零,它将引发 ValueError 以防止创建非阻塞套接字。

一个异常定义为 poplib 模块:

exception poplib.error_proto

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

参见

模块 imaplib

标准的python imap模块。

Frequently Asked Questions About Fetchmail

常见问题解答 fetchmail pop/imap客户机收集有关pop3服务器变化和RFC不符合的信息,如果需要基于pop协议编写应用程序,这些信息可能很有用。

POP3对象

所有pop3命令都由相同名称的方法(小写)表示;大多数返回服务器发送的响应文本。

POP3 实例具有以下方法:

POP3.set_debuglevel(level)

设置实例的调试级别。这将控制打印的调试输出量。默认情况下, 0 ,不生成调试输出。一个值 1 生成适量的调试输出,通常每个请求一行。一个值 2 或更高版本生成最大数量的调试输出,记录在控制连接上发送和接收的每一行。

POP3.getwelcome()

返回POP3服务器发送的问候语字符串。

POP3.capa()

按中的指定查询服务器的功能 RFC 2449 . 返回表单中的词典 {{'name': ['param'...]}} .

3.4 新版功能.

POP3.user(username)

发送用户命令,响应应指示需要密码。

POP3.pass_(password)

发送密码,响应包括邮件数和邮箱大小。注意:服务器上的邮箱在 quit() 被称为。

POP3.apop(user, secret)

使用更安全的APOP身份验证登录到POP3服务器。

POP3.rpop(user)

使用rpop身份验证(类似于unix r-commands)登录到pop3服务器。

POP3.stat()

获取邮箱状态。结果是2个整数的元组: (message count, mailbox size) .

POP3.list([which])

请求消息列表,结果格式为 (response, ['mesg_num octets', ...], octets) .如果 哪一个 已设置,它是要列出的消息。

POP3.retr(which)

检索整个消息编号 哪一个 ,并设置其Seen标志。结果是形式上的 (response, ['line', ...], octets) .

POP3.dele(which)

标记消息编号 哪一个 用于删除。在大多数服务器上,只有在退出后才会执行删除操作(主要异常是Eudora QPOP,它故意违反RFC,在任何断开连接上执行挂起的删除操作)。

POP3.rset()

删除邮箱的所有删除标记。

POP3.noop()

什么也不做。可能被用来维持生命。

POP3.quit()

注销:提交更改、解锁邮箱、断开连接。

POP3.top(which, howmuch)

检索邮件头加上 多少钱? 在消息编号的头之后的消息行 哪一个 . 结果是形式上的 (response, ['line', ...], octets) .

与retr命令不同,此方法使用的pop3 top命令不设置消息的seen标志;不幸的是,top在RFC中的指定不正确,并且经常在非品牌服务器中中断。在信任pop3服务器之前,请手动测试该方法。

POP3.uidl(which=None)

返回消息摘要(唯一ID)列表。如果 哪一个 指定,结果包含表单中该消息的唯一ID 'response mesgnum uid ,否则结果为列表 (response, ['mesgnum uid', ...], octets) .

POP3.utf8()

尝试切换到UTF-8模式。如果成功,返回服务器响应,引发 error_proto 如果不是。指定在 RFC 6856 .

3.5 新版功能.

POP3.stls(context=None)

按照中的指定,在活动连接上启动TLS会话。 RFC 2595 . 只有在用户身份验证之前才允许这样做

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)

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