简介
本模块定义了三个类: IMAP4 、 IMAP4_SSL 和 IMAP4_stream 。这三个类封装了与IMAP4服务器的连接并实现了 RFC 2060 当中定义的大多数IMAP4rev1客户端协议。其与IMAP4( RFC 1730 )服务器后向兼容,但是 STATUS 指令在IMAP4中不支持。
imaplib 模块提供了三个类,其中 IMAP4 是基类:
class imaplib.IMAP4(host=‘’, port=IMAP4_PORT, timeout=None)
这个类实现了实际的 IMAP4 协议。 当其实例被实例化时会创建连接并确定协议版本 (IMAP4 或 IMAP4rev1)。 如果未指明 host,则会使用 ‘’ (本地主机)。 如果省略 port,则会使用标准 IMAP4 端口 (143)。 可选的 timeout 形参指定连接尝试的超时秒数。 如果未指定超时或为 None,则会使用全局默认的套接字超时。
IMAP4 类支持 with 语句。 当这样使用时,IMAP4 LOGOUT 命令会在 with 语句退出时自动发出。 例如:
>>>
from imaplib import IMAP4
with IMAP4("domain.org") as M:
M.noop()
('OK', [b'Nothing Accomplished. d25if65hy903weo.87'])
在 3.5 版更改: 添加了对 with 语句的支持。
在 3.9 版更改: 添加了可选的 timeout 形参。
有三个异常被定义为 IMAP4 类的属性:
exception IMAP4.error
任何错误都将引发该异常。 异常的原因会以字符串的形式传递给构造器。
exception IMAP4.abort
IMAP4 服务器错误会导致引发该异常。 这是 IMAP4.error 的子类。 请注意关闭此实例并实例化一个新实例通常将会允许从该异常中恢复。
exception IMAP4.readonly
当一个可写邮箱的状态被服务器修改时会引发此异常。 此异常是 IMAP4.error 的子类。 某个其他客户端现在会具有写入权限,将需要重新打开该邮箱以重新获得写入权限。
另外还有一个针对安全连接的子类:
class imaplib.IMAP4_SSL(host=‘’, port=IMAP4_SSL_PORT, keyfile=None, certfile=None, ssl_context=None, timeout=None)
这是一个派生自 IMAP4 的子类,它使用经 SSL 加密的套接字进行连接 (为了使用这个类你需要编译时附带 SSL 支持的 socket 模块)。 如果未指定 host,则会使用 ‘’ (本地主机)。 如果省略了 port,则会使用标准的 IMAP4-over-SSL 端口 (993)。 ssl_context 是一个 ssl.SSLContext 对象,它允许将 SSL 配置选项、证书和私钥打包放入一个单独的 (可以长久存在的) 结构体中。 请阅读 安全考量 以获取最佳实践。
keyfile 和 certfile 是 ssl_context 的旧式替代品 —— 它们可以指向 PEM 格式的私钥和证书链文件用于 SSL 连接。 请注意 keyfile/certfile 形参不能与 ssl_context 共存,如果 keyfile/certfile 与 ssl_context 一同被提供则会引发 ValueError。
可选的 timeout 形参指明连接尝试的超时秒数。 如果参数未给出或为 None,则会使用全局默认的套接字超时设置。
在 3.3 版更改: 增加了 ssl_context 形参。
在 3.4 版更改: 本类现在支持使用 ssl.SSLContext.check_hostname 和 服务器名称指示 (参阅 ssl.HAS_SNI)进行主机名检查。
3.6 版后已移除: keyfile 和 certfile 已弃用并转而推荐 ssl_context。 请改用 ssl.SSLContext.load_cert_chain(),或让 ssl.create_default_context() 为你选择系统所信任的 CA 证书。
在 3.9 版更改: 添加了可选的 timeout 形参。
第二个子类允许由子进程所创建的连接:
class imaplib.IMAP4_stream(command)
这是一个派生自 IMAP4 的子类,它可以连接 stdin/stdout 文件描述符,此种文件是通过向 subprocess