如何在解析电子邮件时修复OLE错误

时间:2019-07-11 09:59:03

标签: python python-3.x email outlook win32com

使用win32com模块通过python分析我的外表时,我遇到了OLE错误。

Traceback (most recent call last):
    for i, message in enumerate(messages):
pywintypes.com_error: (-520879857, 'OLE error 0xe0f4010f', None, None)

我认为这是由于网络连接可能在特定时间后重新启动。

inbox= win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI").Folders["Inbox"]
messages = inbox.Items
for i, message in enumerate(messages):

1 个答案:

答案 0 :(得分:0)

遍历文件夹中的所有项目并不是一个好主意:

 for i, message in enumerate(messages):

相反,我建议获取一部分项目并批量处理。例如,您可以使用Find / FindNextRestrict方法来获取项的子集(根据您的条件)并进行处理。在以下文章中了解有关这些方法的更多信息:

How To: Use Find and FindNext methods to retrieve Outlook mail items from a folder (C#, VB.NET)

How To: Use Restrict method to retrieve Outlook mail items from a folder

此外,您可以考虑使用Application类的AdvancedSearch方法。在Outlook中使用AdvancedSearch方法的主要好处是:

  • 搜索是在另一个线程中执行的。您不需要手动运行另一个线程,因为AdvancedSearch方法会在后台自动运行它。

  • 可以在任何位置(即超出某个文件夹的范围)搜索任何项目类型:邮件,约会,日历,便笺等。可以将Restrict和Find / FindNext方法应用于特定的Items集合(请参阅Outlook中Folder类的Items属性)。

  • 完全支持DASL查询(自定义属性也可用于搜索)。您可以在MSDN的Filtering文章中了解有关此内容的更多信息。为了提高搜索性能,如果为商店启用了“即时搜索”,则可以使用“即时搜索”关键字(请参阅Store类的IsInstantSearchEnabled属性)。

  • 您可以随时使用Search类的Stop方法停止搜索过程。