我正在构建一个分析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
答案 0 :(得分:2)
“但这似乎是Outlook应该已经知道如何为我完成的工作”
它应该。但事实并非如此。至少,当我使用API时,我没有找到任何明显的API。也许原因很简单:Message-ID对于Outlook本身来说毫无意义,因此将其保存为属性从未在产品中实现。
现在,我认为最明显的方法是做你已经做过的事情,即。存储Message-ID和StoreID之间的关联 - EntryID对。这将使您可以快速访问所需的电子邮件,而无需浏览每个存储的邮件列表。现在,您必须明确检查Message-ID是否仍然正确,如果不是,则循环遍历每封邮件。
顺便说一句,我不太清楚你为什么要为每个Message-ID存储几个StoreID-EntryID对。我认为邮件只能在Outlook中存储一次,因此每个Message-ID一对就足够了。当这一对已经过时(邮件移动到另一个文件夹/商店)时,你只需要更新它。
注意:访问CreationTime
和MailItem.SenderEmailAddress
属性会不会更容易,更快捷?看到两个不同的邮件共享这些属性会很奇怪,因此它可以通过某种方式唯一地识别邮件,而无需手动提取邮件ID。