我需要通过win32com模块从python删除Outlook中的多封电子邮件。在
我知道有一种VBA方法邮件项目。删除()可通过COM提供给win32com,它可以工作;但是当删除多个电子邮件时,速度非常慢,因为必须按顺序删除电子邮件,即在邮件的mailtime集合上循环。在
有没有什么方法可以一次删除选定的邮件集合,比如MailItemCollection.DeleteAll()? 在
另外,如果上面不可能,是否可以通过多线程方法删除许多电子邮件,例如将邮件项集合划分为4个子集;让4个线程处理这些邮件?在
我想既然我可以通过它的GUI快速删除outlook中的多封电子邮件,那么就必须有一种方法可以通过comapi来做同样的事情。在
上面德达鲁斯的回答很好。想让代码更简洁:
你可能不需要两个“try”,但我发现当你把这个脚本应用到一个长时间且频繁使用的收件箱时,它会更加稳定。通常,我将其与限制消息的脚本相结合收件箱。项目在一周之内,这样就不会处理整个收件箱。在
不在OOM中-
MailItem.Delete
或Items.Remove(Index)
就是你所能得到的。在扩展的MAPI级别(C++或Delphi,但不是Python),可以使用IMAPIFolder.DeleteMessages(它取入口ID列表)删除多个消息。或者可以使用IMAPIFolder.EmptyFolder(删除文件夹中的所有邮件)。在
如果可以选择使用Redemption(任何语言,我是其作者),那么可以使用RDOFolder2.
EmptyFolder
或{a5}.Items.RemoveMultiple
。RDOFolder
可以从RDOSession.GetRDOObjectFromOutlookObject
检索,如果您将Outlook的MAPIFolder
对象作为参数传递。在在@Dimitry给出的一个很好的答案的基础上,我将添加一条可能对您很重要的注释:如果您在迭代时开始从条目中删除,可能会发生奇怪的事情。 例如,在我的系统中,以下Python代码:
以及
^{pr2}$两者都只删除
folder
中的一半项!原因似乎是Items在内部使用一系列索引来提供迭代器,因此每次删除元素时,列表的尾部都会移动一个。。。在要删除文件夹中的所有项目,请尝试:
如果需要按特定条件筛选,请考虑先收集entryid,然后删除搜索ID:
不过,我想它的表现会更糟
相关问题 更多 >
编程相关推荐