20.9. poplibPOP3 协议客户端

源代码:Lib/poplib.py


本模块定义了 1 个 POP3 类,其中封装到 POP3 服务器的连接,并实现议定书 》 所界定的 RFC 1725 POP3类支持这两个最小的和可选的命令集。此外,本模块还提供了 1 个 POP3_SSL 类,为连接到 POP3 服务器使用 SSL 作为底层的协议层提供支持。

请注意,虽然 POP3 协议得到广泛支持,但它已经过时了。POP3 服务器的实现质量参差不齐,其中大多数性能较差。如果您的邮件服务器支持 IMAP 协议,使用 imaplib 这个库会更好。IMAP4 类,以及 IMAP 服务器,通常会有更好的实现。

poplib 模块提供了 2 个类:

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

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

2.6 版本中的更改:添加了 timeout

class poplib.POP3_SSL(host[, port[, keyfile[, certfile]]])

这是在 SSL 加密套接字连接到服务器的POP3的一个子类。如果不指定 port 参数,将使用标准的 POP3-over-SSL 端口 995。keyfilecertfile 也是可选的,它们可以包含一个 PEM 格式私人密钥和证书链文件对于 SSL 连接。

版本 2.4 新增。

一个例外被定义为poplib模块的属性:

exception poplib.error_proto

来自这个模块 (没有捕获到错误从 socket 模块) 的任何错误引发的异常。异常的原因是作为字符串传递给构造函数。

另请参阅

Module imaplib
The standard Python IMAP module.
Frequently Asked Questions About Fetchmail
The FAQ for the fetchmail POP/IMAP client collects information on POP3 server variations and RFC noncompliance that may be useful if you need to write an application based on the POP protocol.

20.9.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个整数元素的元组: (消息计数, 邮箱大小)

POP3.list([which])

请求消息列表中,结果是以(response, ['mesg_num octets’ ......], octets)如果which是设置好的,那么它是邮件收件人的列表。

POP3.retr(which)

获得编号为which的邮件的所有信息,并设置为已读。结果是在窗体中(响应, ['行' ......], 个八位字节)

POP3.dele(which)

标志邮件的数which删除。在大部分的服务器直到退出 (主要的例外是 Eudora QPOP,边学挂起的删除在任何中断,故意违反 Rfc) 实际上不执行删除操作。

POP3.rset()

删除邮箱的任何删除标志。

POP3.noop()

什么都不做。可为保持活着。

POP3.quit()

签收: 提交更改,解锁邮箱,则断开连接。

POP3.top(which, howmuch)

检索消息标头加多少行的消息的消息数报头之后。结果是在窗体中(响应, ['线' ......], 个八位字节)

此方法使用,不同于 RETR 命令,POP3 TOP 命令不设置消息的可见的标志 ;不幸的是,顶部很差的 Rfc 中指定和频发-品牌服务器中。手工测试此方法,对你会信任它之前使用的 POP3 服务器。

POP3.uidl([which])

返回消息摘要 (唯一 id) 列表。如果指定 which,结果包含在窗体中,消息的唯一 id ' 响应 mesgnum uid,否则结果是列表(响应, ['mesgnum uid', ......], 个八位字节)

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

在本模块的结尾,还有一个包含更广泛的使用的例子的测试部分。