登录后,实际获取你感兴趣的电子邮件分为两步。首先,必须选择要搜索的文件
夹。然后,必须调用IMAPClient 对象的search()方法,传入IMAP 搜索关键词字符串。
选择文件夹
几乎每个账户默认都有一个 INBOX 文件夹,但也可以调用 IMAPClient 对象的
list_folders()方法,获取文件夹列表。这将返回一个元组的列表。每个元组包含一个文件夹的信息。输入以下代码,继续交互式环境的例子:
>>> import pprint
>>> pprint.pprint(imapObj.list_folders())
[(('\\HasNoChildren',), '/', 'Drafts'),
(('\\HasNoChildren',), '/', 'Filler'),
(('\\HasNoChildren',), '/', 'INBOX'),
(('\\HasNoChildren',), '/', 'Sent'),
--snip--
(('\\HasNoChildren', '\\Flagged'), '/', '[Gmail]/Starred'),
(('\\HasNoChildren', '\\Trash'), '/', '[Gmail]/Trash')]
如果你有一个 Gmail 账户,这就是输出可能的样子(Gmail 将文件夹称为 label,但它们的工作方式与文件夹相同)。每个元组的三个值,例如 (('\\HasNoChildren',),
'/', 'INBOX'),解释如下:
• 该文件夹的标志的元组(这些标志代表到底是什么超出了本书的讨论范围,你
可以放心地忽略该字段)。
• 名称字符串中用于分隔父文件夹和子文件夹的分隔符。
• 该文件夹的全名。
要选择一个文件夹进行搜索,就调用 IMAPClient 对象的select_folder()方法,传入该文件夹的名称字符串。
>>> imapObj.select_folder('INBOX', readonly=True)
可以忽略 select_folder()的返回值。如果所选文件夹不存在,Python 会抛出
imaplib.error 异常。
readonly=True 关键字参数可以防止你在随后的方法调用中,不小心更改或删除该文件夹中的任何电子邮件。除非你想删除的电子邮件,否则将 readonly 设置为 True总是个好主意。