poplibPOP3协议客户端

源代码: Lib / poplib.py


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

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

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

poplib模块提供两个类:

class poplib.POP3host, port=POP3_PORT [, timeout]

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

class poplib.POP3_SSLhost, port=POP3_SSL_PORT, keyfile=None, certfile=None, timeout=None, context=None

这是POP3的子类,它通过SSL加密套接字连接到服务器。如果未指定port,则使用标准的POP3-over-SSLport。timeout就像在POP3构造函数中一样工作context是一个可选的ssl.SSLContext对象,允许将SSL配置选项,证书和私钥分成单个(可能是长的)生活)结构。请阅读安全考虑以获得最佳实践.

keyfilecertfilecontext的遗留替代品 – 他们可以指向PEM-SSL连接的格式化私钥和证书链文件.

在版本3.2中更改:context参数已添加.

在版本3.4中更改:该类现在支持使用ssl.SSLContext.check_hostnameServer Name Indication检查主机名(请参阅ssl.HAS_SNI).

自版本后弃用3.6:keyfilecertfile不赞成使用context。请用 ssl.SSLContext.load_cert_chain()相反,或者让ssl.create_default_context()为您选择系统的可信任CA证书.

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

exception poplib.error_proto

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

参见

模块imaplib
标准的Python IMAP模块.
关于Fetchmail的常见问题
fetchmail的常见问题POP / IMAP客户端收集有关PCI3服务器变体和RFC不合规的信息,如果您需要基于POP协议编写应用程序,可能会有用.

POP3 Objects

所有POP3命令都由同名的方法表示,小写;大多数返回服务器发送的响应文本.

POP3实例有以下方法:

POP3.set_debuglevellevel

设置实例的调试级别。这可以控制打印的debuggingoutput数量。默认值0不产生调试输出。值1产生适量的调试输出,通常是单个线路请求。值2或更高产生最大量的调试输出,记录控制连接上发送和接收的每一行.

POP3.getwelcome ()

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

POP3.capa

查询 RFC 2449 中指定的服务器功能。返回表格中的字典{"name": ["param"...]}.

版本3.4中的新增功能.

POP3.userusername

发送用户命令,响应应该表明需要密码.

POP3.pass_ (password )

发送密码,响应包括邮件计数和邮箱大小。注意:服务器上的邮箱被锁定,直到调用quit().

POP3.apop(user, secret)

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

POP3.rpopuser

使用RPOP认证(类似于UNIX r命令)登录POP3服务器.

POP3.stat ()

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

POP3.list [which]

请求消息列表,结果在表格 (response, ["mesg_num octets",...], octets)。如果设置了which,则是要列出的消息.

POP3.retr (which)

检索整个消息号which,并设置它的旗帜。结果形式为(response, ["line", ...], octets).

POP3.delewhich

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

POP3.rset

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

POP3.noop ( )

什么都不做。可以用作keep-alive.

POP3.quit()

Signoff:提交更改,解锁邮箱,断开连接.

POP3.topwhich, howmuch

在消息号howmuch的头之后检索消息头加上which消息行。结果形式为(response, ["line", ...],octets).

与RETR命令不同,此方法使用的POP3 TOP命令不设置themessage的see标志;不幸的是,TOP在RFC中的指定很差,并且在品牌外的服务器中经常被破坏。在信任它之前,手动测试这个方法对你将使用的PP3服务器.

POP3.uidl (which=None)

返回消息摘要(唯一ID)列表。如果指定which,则结果包含"response mesgnum uid格式的该消息的唯一id,否则结果为list (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_hostnameServer Name Indication(看到ssl.HAS_SNI).

版本3.4.

的实例POP3_SSL没有其他方法。这个子类的接口与它的父类相同.

POP3例

这是一个最小的例子(没有错误检查),打开邮箱并检索并打印所有邮件:

import getpass, poplibM = 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)

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

评论被关闭。