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

时间:2013-04-30 21:31:36

标签: c# .net outlook office-interop

您好我正在创建一个阅读Outlook中收到的电子邮件的应用程序。阅读过程是这样的:

使用线条:

using Outlook = Microsoft.Office.Interop.Outlook;

代码块:

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
}

现在我需要从这个项目中获取一个唯一的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。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

MailItem的唯一ID可以通过合并一些电子邮件属性来获得,这些属性对于任何不同的电子邮件都不太可能是相同的,例如

$“ {item.SenderEmailAddress}-{item.SentOn.Ticks / TimeSpan.TicksPerSecond}-{item.Size}”;