Python win32com.client for Outlook : 'Move'函数将有限数量的电子邮件从收件箱移动到其他文件夹



上下文:我的outlook收件箱中有100封邮件,主题为'Target subject <something>',我想将它们全部移动到另一个文件夹中,假设为'MyFolder'。下面是我的python(版本=3.9.6)程序:

import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
root_folder = outlook.Folders.Item(1)
inbox = outlook.GetDefaultFolder(6)
myfolder = root_folder.Folders['MyFolder']
messages = inbox.Items
for message in messages:
if 'Target subject' in message.Subject:
message.Move(myfolder)

问题:该程序运行时不会抛出任何错误,但只有20封电子邮件被移动。如果我运行这个程序几次,它可以一次移动20个。

尝试:我已经搜索了windows API文档,但没有发现任何有用的。

问题:你知道是什么导致了这种限制以及如何避免它吗?

谢谢!

首先,我注意到以下几行代码:

for message in messages:
if 'Target subject' in message.Subject:

遍历文件夹中的所有项目并检查主题行是否包含特定的关键字,这确实不是一个好主意。相反,我建议使用Items类的Find/FindNext或Restrict方法。在以下文章中阅读更多关于这些方法的信息:

  • 如何:使用Find和FindNext方法从文件夹中检索Outlook邮件项目(c#, VB.NET)
  • 如何:使用Restrict方法从文件夹
  • 中检索Outlook邮件项目

如果您仍然处理项目的集合(在Restrict方法的情况下),您需要从末尾使用for循环遍历所有项目,并以以下方式调用Move方法:

for i in reversed(messages):
i.Move(myFolder)

在更改集合时(通过移动消息)正在循环-不可避免地会以跳过的项结束。

你需要从Count down到1的反向循环。

相关内容

最新更新