我想阅读我的Outlook电子邮件,只未读的。我现在的代码是:
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message = messages.GetFirst ()
while message:
if message.Unread == True:
print (message.body)
message = messages.GetNext ()
但这是从第一封电子邮件到最后一封电子邮件。我想按相反的顺序去,因为未读的电子邮件将在顶部。有办法做到吗?
3条答案
按热度按时间q8l4jmvw1#
我同意科尔的观点,for循环可以很好地遍历所有的代码。如果从最近收到的电子邮件开始很重要(例如对于特定的顺序,或限制您通过的电子邮件数量),您可以使用Sort函数按Received Time属性对它们进行排序。
uujelgoq2#
为什么不使用for循环?从第一个到最后一个浏览你的信息,就像它似乎是你试图做的那样。
qcbq4gxm3#
这是一个有点老的问题,但这是谷歌上关于这个问题的热门帖子之一,所以我想补充一下我的经验。
使用for循环来迭代消息是一种更“pythonic”的代码结构化方式,但是根据我的经验,它经常会导致这个特定的库/API失败,因为任何外部更改(例如:当程序迭代时,电子邮件被移动到另一个文件夹)可能会导致可怕的4096异常。
此外,您会发现任何非电子邮件(例如:会议邀请)可能导致意外的结果/异常。
因此,我使用的代码是原始海报代码的网格,Bex Way的公认答案,以及我自己的发现: