使用Python从Outlook删除电子邮件时出现问题



使用生成器在Outlook中循环访问电子邮件时,我在删除它们时遇到了一些问题。如果我在邮件上调用删除,生成器将"跳转"下一项,因此它只会处理我收件箱中一半的电子邮件。

for message in scanner.scan_emails():
            message.Delete()
            deleted_counter += 1

作为一种解决方法,我将所有消息保存在一个列表中,然后循环遍历它们: 对于emails_to_delete_list中的消息: 消息。删除()

有没有更好的方法可以做到这一点?

对于Windows,您可以使用win32com(pip install pypiwin32)。 6是您的主要"收件箱"。 循环访问文件夹和每封电子邮件,然后调用 Delete 。

import time
import win32com.client

def email_deleter():
    folders = ["BORK", "FOO", "SPAM", "EGGS"]
    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    for folder in folders:
        emails = outlook.GetDefaultFolder(6).Folders[folder]
        for email in emails.Items:
            email.Delete()

if __name__ == "__main__":
    for i in range(10):
        time.sleep(0.1)
        email_deleter()

请参阅 VB 引用使用向后 for 循环:

items = outlookObject.Items
for i in range(items.Count, 0, -1):
    items.Item(i).Delete()

最新更新