Основная проблема заключается в том, как определить, что такое дубликат. Если вы перемещаете их в пределах одного .PST, вы можете сравнить свойство MailItem.Id, поскольку оно уникально в одном 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;
}
Я использовал маршрут, очень похожий на это, спасибо. Вместо поиска совпадений я получаю все электронные письма и помещаю их в HashSet для PST. Прежде чем копировать текущее письмо, я проверяю, присутствует ли его хэш в другом Pash's HashSet. –