我正在构建一个分析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.