当使用生成器在Outlook中迭代电子邮件时,我在删除它时遇到一些问题。如果我在消息上调用delete,则生成器将跳过"跳转"在下一个项目上,它只会处理我的收件箱中的一半电子邮件。
for message in scanner.scan_emails():
message.Delete()
deleted_counter += 1
作为一种解决方法,我将所有消息保存在列表中,然后循环遍历它们: 对于emails_to_delete_list中的消息: message.Delete()
有更好的方法吗?
答案 0 :(得分:0)
See VB reference向后使用for循环:
items = outlookObject.Items
for i in range(items.Count, 0, -1):
items.Item(i).Delete()
答案 1 :(得分:0)
对于Windows,您可以使用win32com(pip安装pypiwin32)。 6是您的主要“收件箱”。 遍历文件夹和每封电子邮件,然后调用“删除”。
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()