使用生成器在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()