从MailItem获取唯一ID(Microsoft.Office.Interop.Outlook)?

Jon*_*zzi 6 .net c# outlook office-interop

嗨,我正在创建一个应用程序来阅读Outlook中收到的电子邮件.阅读过程是这样的:

在使用行:

using Outlook = Microsoft.Office.Interop.Outlook;
Run Code Online (Sandbox Code Playgroud)

代码块:

var app = new Outlook.Application();
var ns = app.GetNamespace("MAPI");
ns.Logon(null, null, false, false);

var inboxFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
var subfolder = inboxFolder.Folders["MyFolderName"];

foreach (Outlook.MailItem item in subfolder.Items)
{
    // do something
    // item.EntryID
}
Run Code Online (Sandbox Code Playgroud)

现在我需要从这个项目中获取一个唯一的id(在foreach中).有一个EntryID属性Outlook.MailItem,我使用它,它运作良好,但我发现了一个问题.当我将电子邮件(在Outlook中)移动到另一个文件夹时,此属性已EntryID更改.

我运行了几次测试,发现EntryID当我将邮件移动到另一个文件夹时,该值只会改变几个字符.

无论什么文件夹,我都需要一个唯一的ID.是否有另一个属性Outlook.MailItem或其中的任何子串EntryID始终是唯一的?

我正在使用:

  • .net 4.0.
  • Outlook 2010.
  • Microsoft.Office.Interop.Outlook.dll版本14.0.0.0.

Dmi*_*nko 7

没有这样的财产.您可以使用MailItem.PropertyAccessor或MailItem.UserProperties创建自己的属性,但如果将邮件复制到另一个文件夹,它将不再是唯一的,因为您现在将拥有2个具有相同ID的项目.

  • EntryId是*唯一标识符.移动邮件时它会发生变化,这意味着Exchange将其视为完全不同的对象.请注意,PST商店提供商不会更改条目ID. (2认同)