首页
学习
活动
专区
工具
TVP
发布

poplib

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

在版本2.6中更改:添加了超时

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

这是POP3通过SSL加密套接字连接到服务器的子类。如果未指定端口 995,则使用标准的POP3-over-SSL端口。keyfilecertfile也是可选的 - 它们可以包含用于SSL连接的PEM格式的私钥和证书链文件。

2.4版本中的新功能。

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

exception poplib.error_proto

从该模块发出的任何错误都会引发异常(模块发生的错误socket不会被捕获)。异常的原因以字符串形式传递给构造函数。

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个整数的元组:(message count, mailbox size)

POP3.list([which])

请求消息列表,结果在表格中(response, ['mesg_num octets', ...], octets)。如果被设置,它是列出的消息。

POP3.retr(which)

检索整个消息号,其,并设置其可见标志。结果在表格中(response, ['line', ...], octets)

POP3.dele(which)

标志的消息号,其为删除。在大多数服务器上,直到QUIT(主要的例外是Eudora QPOP,它故意通过在任何断开连接上执行挂起删除操作时故意违反RFC),删除操作才会实际执行。

POP3.rset()

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

POP3.noop()

没做什么。可能被用作保持活力。

POP3.quit()

签署:提交更改,解锁邮箱,删除连接。

POP3.top(which, howmuch)

检索消息首部加上howmuch的消息号的报头之后的消息的线哪个。结果在表格中(response, ['line', ...], octets)

与RETR命令不同,此方法使用的POP3 TOP命令不会设置消息的可见标志; 不幸的是,TOP在RFC中没有详细说明,并且在非品牌服务器中经常被破坏。在信任它之前,手动测试您将使用的POP3服务器。

POP3.uidl([which])

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

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

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

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

扫码关注腾讯云开发者

领取腾讯云代金券