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



当我的 Outlook 使用 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):

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

for i, message in enumerate(messages):

相反,我建议获取项目的子集并批量处理它们。例如,您可以使用Find/FindNextRestrict方法来获取项目的子集(根据您的条件)并对其进行处理。在以下文章中阅读有关这些方法的详细信息:

如何:使用"查找"和"查找下一个"方法从文件夹中检索 Outlook 邮件项目(C#、VB.NET)

如何:使用限制方法从文件夹中检索 Outlook 邮件项目

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

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

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

  • 完全支持 DASL 查询(自定义属性也可用于搜索)。您可以在 MSDN 中的筛选文章中阅读有关此内容的详细信息。为了提高搜索性能,如果为存储启用了即时搜索,则可以使用即时搜索关键字(请参阅 Store 类的 IsInstantSearchEnabled 属性)。

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

最新更新