当前位置:嗨网首页>书籍在线阅读

21-取邮件并标记为已读

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

18.5.4 取邮件并标记为已读

得到UID的列表后,可以调用 IMAPClient 对象的 fetch() 方法,来获得实际的电子邮件内容。

UID列表是 fetch() 的第一个参数。第二个参数应该是 ['BODY[]'] ,它告诉 fetch() 下载UID列表中指定电子邮件的所有正文内容。

让我们继续演示交互式环境的例子:

>>> rawMessages = imapObj.fetch(UIDs, ['BODY[]'])
>>> import pprint
>>> pprint.pprint(rawMessages)
{40040: {'BODY[]': 'Delivered-To: [email protected]\r\n'
                   'Received: by 10.76.71.167 with SMTP id '
--snip--
                   '\r\n'
                   '------=_Part_6000970_707736290.1404819487066--\r\n', 
        'SEQ': 5430}}

导入 pprint ,将 fetch() 的返回值(保存在变量 rawMessages 中)传入 pprint. pprint() ,“美观地输出”它。你会看到,这个返回值是消息的嵌套字典,其中以UID作为键。每条消息都保存为一个字典,包含两个键: 'BODY[]''SEQ''BODY[]' 键映射到电子邮件的实际正文。 'SEQ' 键是序列号,它与UID的作用类似。你可以放心地忽略它。

如你所见,在 'BODY[]' 键中的消息内容是相当难理解的。这种格式称为RFC 822,是专为IMAP服务器读取而设计的。但你并不需要理解RFC 822格式,本章稍后的 pyzmail 模块将替你来理解它。

如果你选择一个文件夹进行搜索,就用 readonly=True 关键字参数来调用 select_ folder() 。这样做可以防止意外删除电子邮件,但这也意味着你用 fetch() 方法获取邮件时,它们不会标记为已读。如果确实希望在获取邮件时将它们标记为已读,就需要将 readonly=False 传入 select_folder() 。如果所选文件夹已处于只读模式,可以用另一个 select_folder() 调用重新选择当前文件夹,这次用 readonly=False 关键字参数:

>>> imapObj.select_folder('INBOX', readonly=False)