20.10. imaplib — IMAP4 协议 Client 端

源代码: Lib/imaplib.py


此模块定义了三个类IMAP4IMAP4_SSLIMAP4_stream,它们封装了与 IMAP4 服务器的连接并实现了 RFC 2060中定义的 IMAP4rev1Client 端协议的较大子集。它与 IMAP4( RFC 1730)服务器向后兼容,但请注意,IMAP4 不支持STATUS命令。

imaplib模块提供了三个类,其中IMAP4是 Base Class:

IMAP4类的属性定义了三个 exception:

还有一个用于安全连接的子类:

第二个子类允许由子进程创建的连接:

2.3 版的新Function。

定义了以下 Util Function:

请注意,随着邮箱的更改,IMAP4 消息号也会更改。特别是,在EXPUNGE命令执行删除后,其余消息将重新编号。因此,强烈建议使用 UID 命令代替 UID。

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

See also

可以在华盛顿大学的* IMAP 信息中心*(https://www.washington.edu/imap/)中找到描述协议的文档以及实现该协议的服务器的源和二进制文件。

20.10.1. IMAP4 对象

所有 IMAP4rev1 命令均由大小写相同的相同名称的方法表示。

AUTHENTICATE之外,所有命令参数均转换为字符串,而APPEND的最后一个参数作为 IMAP4Literals 传递。如有必要(该字符串包含 IMAP4 协议敏感字符,并且不包含在括号或双引号中),每个字符串都用引号引起来。但是,LOGIN命令的* password 参数总是被引用。如果要避免使用引号将参数字符串引起来(例如STORE flags *参数),则将该字符串括在括号中(例如r'(\Deleted)')。

每个命令都返回一个 Tuples:(type, [data, ...]),其中* type 通常是'OK''NO',而 data 是命令响应中的文本或命令中的强制结果。每个 data *是一个字符串或一个 Tuples。如果是 Tuples,则第一部分是响应的标题,第二部分包含数据(即:“Literals”值)。

以下命令的* message_set *选项是一个字符串,用于指定要执行的一条或多条消息。它可以是简单的消息编号('1'),消息编号范围('2:4')或由逗号分隔的一组非连续范围('1:3,6:9')。一个范围可以包含一个星号,以指示一个无限的上限('3:*')。

IMAP4实例具有以下方法:

data = authobject(response)

将调用它来处理服务器连续响应。它应返回data,它将被编码并发送到服务器。如果应该发送 Client 端中止响应*,它应该返回None

2.4 版的新Function。

2.5 版的新Function。

2.3 版的新Function。

2.3 版的新Function。

2.3 版的新Function。

2.4 版的新Function。

2.3 版的新Function。

2.3 版的新Function。

Example:

# M is a connected IMAP4 instance...
typ, msgnums = M.search(None, 'FROM', '"LDJ"')

# or:
typ, msgnums = M.search(None, '(FROM "LDJ")')

2.5 版的新Function。

2.3 版的新Function。

Sort 在* search_criterion 参数之前有两个参数;带括号的 sort_criteria 列表和搜索 charset *。请注意,与search不同,search * charset *参数是必需的。还有一个_命令对应于sort,而uid search对应于searchsort命令首先使用 charset 参数在邮箱中搜索与给定搜索条件相匹配的邮件,以解释搜索条件中的字符串。然后,它返回匹配消息的数量。

这是一个IMAP4rev1extensions 命令。

例如,要在所有消息上设置删除标志:

typ, data = M.search(None, 'ALL')
for num in data[0].split():
   M.store(num, '+FLAGS', '\\Deleted')
M.expunge()

线程成员由零个或多个消息号组成,并用空格分隔,表示连续的父级和子级。

线程在* search_criterion *参数之前有两个参数; * threading_algorithm 和搜索 charset *。请注意,与search不同,search * charset *参数是必需的。还有一个_命令对应于thread,而uid search对应于searchthread命令首先使用 charset 参数在邮箱中搜索与给定搜索条件相匹配的邮件,以解释搜索条件中的字符串。然后,它将根据指定的线程算法返回匹配的消息。

这是一个IMAP4rev1extensions 命令。

2.4 版的新Function。

IMAP4_SSL的实例只有一种附加方法:

IMAP4的实例上定义了以下属性:

20.10.2. IMAP4 示例

这是一个最小示例(不进行错误检查),该示例打开邮箱并检索和打印所有消息:

import getpass, imaplib

M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    print 'Message %s\n%s\n' % (num, data[0][1])
M.close()
M.logout()
首页