8

我正在创建一个正在阅读 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
}

我需要为循环item中的每个人获取一个唯一的 ID 。foreach

我使用了一个EntryID属性Outlook.MailItem并且它运行良好,但我发现该属性存在问题:每当我将电子邮件移动到另一个文件夹(在 Outlook 内)时,此属性都会EntryID更改。

我进行了几次测试,发现EntryID当我将邮件移动到另一个文件夹时,该值仅更改了几个字符。

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

我正在使用:

  • .NET 4.0;
  • 展望 2010;
  • Microsoft.Office.Interop.Outlook.dll 版本 14.0.0.0。
4

2 回答 2

9

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

于 2013-04-30T22:03:24.340 回答
2

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

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

于 2018-10-06T19:31:30.183 回答