c# – 如何使用唯一且稳定的标识符访问Outlook邮件?

我正在构建一个分析Outlook电子邮件的应用程序,存储分析的信息,然后允许用户打开符合特定条件的邮件.

我希望我从每封电子邮件中提取Message-ID,将其存储在我的数据库中,然后要求Outlook通过稍后向其提供Message-ID来打开消息.但是,我似乎错过了一些东西.

通过Outlook互操作API,我可以获得一个EntryID,但据我所知,一个EntryID只能保证在给定文件夹(或者某个给定的商店)中保持稳定.如果将邮件移动到其他文件夹,则EntryID可能会更改.此外,API要求在按EntryID查找消息时提供StoreID.同样,如果在商店之间移动消息,则该信息可能无效.

我见过很多与Office相关的产品,它们看起来像我上面所描述的那样.如何有效查找Outlook可访问的邮件,无论商店等等?

目前,我的备份计划是为我扫描的每个Message-ID存储EntryID和StoreID信息,然后尝试我为给定MessageID记录的所有各种EntryID / StoreID组合,直到一个成功.但这似乎是Outlook应该已经知道如何为我完成的工作.

谢谢,

-Patrick

最佳答案 “但这似乎是Outlook应该已经知道如何为我完成的工作”

这应该.但事实并非如此.至少,当我使用API​​时,我没有找到任何明显的API.也许原因很简单:Message-ID对于Outlook本身来说毫无意义,因此将其保存为属性从未在产品中实现.

现在,我认为最明显的方法是做你已经做过的事情,即.存储Message-ID和StoreID之间的关联 – EntryID对.这将使您可以快速访问所需的电子邮件,而无需浏览每个存储的邮件列表.现在,您必须明确检查Message-ID是否仍然正确,如果不正确,则循环浏览每封邮件.

顺便说一下,我不明白你为什么要为每个Message-ID存储几个StoreID-EntryID对.我认为邮件只能在Outlook中存储一次,因此每个Message-ID一对就足够了.当这一对已经过时(邮件移动到另一个文件夹/商店)时,您只需更新它.

注意:访问CreationTime和MailItem.SenderEmailAddress属性会不会更容易,更快捷?看到两个不同的邮件共享这些属性会很奇怪,因此它在某种程度上是一种唯一标识邮件的方法,而无需手动提取Message-ID.

点赞