16.4.7 取邮件并标记为已读

得到 UID 的列表后,可以调用 IMAPClient 对象的 fetch()方法,获得实际的电
子邮件内容。
UID 列表是 fetch()的第一个参数。第二个参数应该是['BODY[]'],它告诉 fetch()
下载UID 列表中指定电子邮件的所有正文内容。

使用 IMAPClient 的 gmail_search()方法
如果登录到 imap.gmail.com 服务器来访问 Gmail 账户,IMAPClient 对象提供了一个额外的搜索函数,模拟 Gmail 网页顶部的搜索栏,如图 16-1 中高亮的部分所示。

 

除了用 IMAP 搜索键搜索,可以使用 Gmail 更先进的搜索引擎。Gmail 在匹配密切相关的单词方面做得很好(例如,搜索 driving 也会匹配drive 和 
drove),并按照匹配的程度对搜索结果排序。也可以使用Gmail 的高级搜索操作符(更多信息请参见 http://nostarch.com/automatestuff/ )。如果登录到 Gmail 
 账户,向 gmail_search()方法传入搜索条件,而不是 search()方法,就像下面交互式环境的例子:
>>>  UIDs  =  imapObj.gmail_search('meaning  of  life')
>>>  UIDs
[42]


啊,是的,那封电子邮件包含了生命的意义!我一直在期待。

让我们继续交互式环境的例子。
>>>  rawMessages  =  imapObj.fetch(UIDs,  ['BODY[]'])
>>>  import  pprint
>>>  pprint.pprint(rawMessages)
{40040:  {'BODY[]':  'Delivered-To:  my_email_address@gmail.com\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[]'键中的消息内容是相当难理解的。这种格式称为 RFC822,是专为 IMAP 服务器读取而设计的。但你并不需要理解 RFC 822 格式,本章稍后的 pyzmail 
模块将替你来理解它。
如果你选择一个文件夹进行搜索,就用 readonly=True  关键字参数来调用 select_ folder()。这样做可以防止意外删除电子邮件,但这也意味着你用 
fetch()方法获取邮件时,它们不会标记为已读。如果确实希望在获取邮件时将它们标记已读,就需要将 readonly=False 传入 
select_folder()。如果所选文件夹已处于只读模式,可以用另一个 select_folder()调用重新选择当前文件夹,这次用 readonly=False 关键字参数:
>>>  imapObj.select_folder('INBOX',  readonly=False)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞哥软件自习室

希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值