您的主要問題在於如何確定什麼是重複的。如果您在單個.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;
}
我已經使用了一個非常相似的路線,謝謝。代替搜索匹配,我散列所有電子郵件並將其放入每個PST的HashSet。在複製當前電子郵件之前,我測試它的散列值是否存在於另一個PST的HashSet中。 –