C# 是否从邮件项目(Microsoft.Office.Interop.Outlook)获取唯一Id?
我正在创建一个应用程序,用于读取outlook中收到的电子邮件 阅读过程是这样的: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
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。