poplib
poplib — POP3 protocol 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协议。连接在实例初始化时创建。如果省略端口
,则使用标准的POP3端口
(110)。可选的timeout
参数指定连接尝试的超时(以秒为单位)(如果未指定,则将使用全局默认超时设置)。
在版本2.6中更改:添加了超时
。
class poplib.POP3_SSL(host[, port[, keyfile[, certfile]]])
这是POP3
通过SSL加密套接字连接到服务器的子类。如果未指定端口
995,则使用标准的POP3
-over-SSL端口
。keyfile
和certfile
也是可选的 - 它们可以包含用于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
在模块的最后,有一个测试部分,其中包含更广泛的使用示例。