Python imaplib:获取第一封未读邮件

Python imaplib: get the first unread email

我 运行 遇到了问题,因为当我使用时:

_, search = server.search(None, 'UNSEEN')

搜索方法 return 包含所有未读消息...但我希望它只读取第一条未读消息,否则其余代码将毫无意义。这可能吗?因此,如果我一次又一次地调用该方法,我希望它只是 return 下一条未读消息等等...

如果您最终打算无论如何都要阅读所有消息,循环查看当前未读的消息比在每条消息后再次搜索更经济。

_, search = server.search(None, 'UNSEEN')
for num in search[0].split():
   result, data = M.fetch(num, '(RFC822)')
   msg = email.message_from_bytes(data[0][1])
   whatever(msg)

如果您真的想在一条消息后退出,您可以在处理完一条消息后使用 break 退出 for 循环。或者重写代码只处理第一个:

_, search = server.search(None, 'UNSEEN')
result, data = M.fetch(search[0].split()[0], '(RFC822)')
msg = email.message_from_bytes(data[0][1])
whatever(msg)