代码之家  ›  专栏  ›  技术社区  ›  Patrick Linskey

如何使用唯一和稳定的标识符访问Outlook邮件?

  •  4
  • Patrick Linskey  · 技术社区  · 14 年前

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

    我希望从每个电子邮件中提取邮件ID,将其存储在我的数据库中,然后让Outlook在以后打开一封邮件,向其提供邮件ID。不过,我好像错过了什么。

    通过outlook interop API,我可以得到entryID,但据我所知,entryID只能保证在给定文件夹(或给定存储)中是稳定的。如果邮件移动到其他文件夹,则entryID可能会更改。此外,API要求在EntryID查找消息时提供StoreID。同样,如果消息在存储之间移动,那么该信息可能无效。

    我见过很多与办公室相关的产品,它们看起来像我上面描述的那样。如何有效地查找可供Outlook访问的邮件,而不考虑商店等?

    目前,我的备份计划是为我扫描的每个消息ID存储entryID和storeID信息,然后尝试为给定的消息ID记录的所有entryID/storeID组合,直到成功为止。但这看起来像是一项工作,前景应该已经知道如何为我完成。

    谢谢,

    -帕特里克

    1 回复  |  直到 14 年前
        1
  •  2
  •   Arseni Mourzenko    14 年前

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

    它应该。但事实并非如此。至少,当我使用API时,我没有发现任何明显的API。可能原因很简单:消息ID对Outlook本身没有意义,因此将其保存为属性从未在产品中实现。

    现在,我认为最明显的方法是做您已经做的事情,即存储消息ID和storeID-entryID对之间的关联。这将允许您快速访问所需的电子邮件,而无需浏览每个存储邮件的列表。现在,您必须明显地检查消息ID是否仍然正确,如果仍然不正确,则在每个邮件中循环。

    顺便说一下,我不太明白为什么要为每个邮件ID存储几个storeid-entryid对。我想邮件在Outlook中只存储一次,所以每个邮件ID一对就足够了。当这对邮件过时(邮件移动到另一个文件夹/存储)时,您只需更新它。

    注:访问是否更容易、更快? CreationTime MailItem.SenderEmailAddress 属性?看到两个不同的邮件共享这些属性是很奇怪的,所以这是一种唯一标识邮件的方法,而不必手动提取邮件ID。

    推荐文章