你这里的主要问题是如何确定什么是重复的。如果您在单个 .PST 中移动它们,您可以比较 MailItem.Id 属性,因为这在单个 PST 中是唯一的。当您从一个 pst 移动到另一个 pst 时,您可能想要查看您认为邮件项目上哪些属性是“独特的”并进行比较。(如果需要,您甚至可以使用哈希值)。举个例子 -
var hash = String.Format("{0}{1}{2}{3}", item.To, item.From, item.CC, item.Subject, item.Body).GetHashCode();
应该给你一个哈希值来与你的目标 PST 中的现有项目进行比较。
或者只是比较您认为会显示重复的属性
例子 -
private bool CheckIsDuplicate(MailItem item)
{
//load the target pst
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
outlookNs.AddStore(@"D:\pst\Test.pst");
Microsoft.Office.Interop.Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderSentMail);
//check for your mail item in the repository
var duplicateItem = (
from email in
emailFolder.Items.OfType<MailItem>()
where //here you could try a number of things a hash value of the properties or try using the item.I
email.SenderName == item.SenderName &&
email.To == item.To &&
email.Subject == item.Subject &&
email.Body == item.Body
select email
).FirstOrDefault();
return duplicateItem != null;
}