Pat*_*key 5 c# office-interop outlook-object-model
我正在构建一个应用程序来分析 Outlook 电子邮件,存储分析的信息,然后允许用户打开满足特定条件的邮件。
我希望我会从每封电子邮件中提取 Message-ID,将其存储在我的数据库中,然后通过稍后向 Outlook 提供 Message-ID 来要求 Outlook 打开一条消息。但是,我似乎错过了一些东西。
通过 Outlook 互操作 API,我可以获得一个 EntryID,但据我所知,EntryID 只能保证在给定的文件夹(或者可能是给定的商店)中稳定。如果将邮件移动到不同的文件夹,则 EntryID 可能会更改。此外,API 要求在通过 EntryID 查找消息时提供 StoreID。同样,如果消息在存储之间移动,则该信息可能是无效的。
我见过很多与 Office 相关的产品,它们似乎具有我上面描述的功能。如何高效查找 Outlook 可访问的邮件,而不管商店等如何?
目前,我的备份计划是为我扫描的每个 Message-ID 存储 EntryID 和 StoreID 信息,然后尝试我为给定 MessageID 记录的所有各种 EntryID/StoreID 组合,直到成功为止。但这似乎是 Outlook 应该已经知道如何为我完成的工作。
谢谢,
-帕特里克
“但这似乎是 Outlook 应该已经知道如何为我完成的工作”
它应该。但事实并非如此。至少,当我使用API时,我没有发现任何明显的API。也许原因很简单:Message-ID 对于 Outlook 本身来说毫无意义,因此将其保存为属性从未在产品中实现。
现在,我认为最明显的方法是做你已经在做的事情,即。存储 Message-ID 和 StoreID - EntryID 对之间的关联。这将让您快速访问所需的电子邮件,而无需浏览每个存储的邮件的列表。现在,您显然必须检查 Message-ID 是否仍然正确,如果不正确,则循环检查每封邮件。
顺便说一句,我不太明白为什么你要为每个 Message-ID 存储多个 StoreID - EntryID 对。我认为邮件在 Outlook 中仅存储一次,因此每个消息 ID 一对就足够了。当该对已过时(邮件移至另一个文件夹/存储)时,您只需更新它即可。
CreationTime注意:访问和MailItem.SenderEmailAddress属性不是更容易、更快捷吗?看到两个不同的邮件共享这些属性会很奇怪,因此它在某种程度上是唯一标识邮件的一种方法,而无需手动提取消息 ID。