Python: 将所有 outlook 邮件移动到不同的文件夹

Python: Move all outlook emails to different folder

我正在从事一个项目,该项目涉及从收到的电子邮件中抓取数据。

我坚持的部分是,在我将消息放入本地内存后,我试图将电子邮件从原始位置移动到存档文件夹,因为这个过程将 运行 每周我想确保事情不会被重复计算。

我正在使用一种非常标准的方法将电子邮件加载到内存中,但需要注意的是,这些电子邮件将进入一个单独的电子邮件组,而不是我的本地电子邮件帐户,这增加了一个步骤。它看起来像这样:

outlook = win32com.client.Dispatch('Outlook.Application').GetNamespace('MAPI')
folder =outlook.Folders.Item('Product Alerts')
tempBox = folder.Folders.Item('Inbox')
inbox = tempBox.Folders.Item('Electronic Product Alert')

archiveFolder = folder.Folders.Item('Product Alert Archive')

messages = inbox.Items

#this is the part that isn't working
for email in inbox.Items:
     email.Move(archiveFolder)

问题是将电子邮件移动到存档文件夹的循环不会移动文件夹中的所有电子邮件,它会移动一些并留下其他电子邮件。

我也试过了

for message in messages:
     message.Move(archiveFolder)

它与 inbox.Items

做同样的事情

我还检查以确保邮件加载正确,以确保与 Outlook 通信没有问题,但是 运行

print(len(messages))

给出文件夹中电子邮件数量的正确结果。

我是否遗漏了一些明显的东西来阻止此循环将所有电子邮件移动到存档文件夹,或者我是否需要使用不同的方法?

您的代码正在修改集合(通过调用 Move),同时您正在遍历其元素。

使用从 messages.Count 到 1 的向下循环。

首先,我建议使用GetDefaultFolder方法获取收件箱文件夹,然后再处理子文件夹。

tempBox = folder.Folders.Item('Inbox')

此调用可以替换,因为根据用户的区域设置,名称可能不同。

在下面的代码中,您没有考虑到项目被移动和集合减少,所以每次都减少一个项目:

#this is the part that isn't working
for email in inbox.Items:
     email.Move(archiveFolder)

相反,您需要在代码中使用反向 for 循环来移动或删除集合中的项目:

 For i = Items.Count To 1 Step -1
     Items(i).Move(..)
 Next