Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否从邮件项目(Microsoft.Office.Interop.Outlook)获取唯一Id?_C#_.net_Outlook_Office Interop - Fatal编程技术网

C# 是否从邮件项目(Microsoft.Office.Interop.Outlook)获取唯一Id?

C# 是否从邮件项目(Microsoft.Office.Interop.Outlook)获取唯一Id?,c#,.net,outlook,office-interop,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.Ol

我正在创建一个应用程序,用于读取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
}
我需要为
foreach
循环中的每个
项目
获取唯一ID

我使用的
Outlook.MailItem
中有一个
EntryID
属性,它工作正常,但我发现该属性有一个问题:每当我将电子邮件移动到另一个文件夹(Outlook内部)时,该属性
EntryID
都会更改

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

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

我正在使用:

  • .NET 4.0
  • 展望2010年
  • Microsoft.Office.Interop.Outlook.dll版本14.0.0.0

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

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


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

      EntryID可能会更改,但我假设它是唯一的,而与文件夹无关。到底是什么问题,你想把对id的引用保存到某个地方吗?那么Dmitry,你说邮件没有唯一的标识符。我不怀疑您,但是,据我所知,outlook如何知道邮件是何时从exchange邮箱下载的?EntryId是唯一标识符。当消息被移动时,它会发生变化,这一事实仅仅意味着Exchange将其视为一个完全不同的对象。请注意,PST存储提供程序不会更改条目id。