0
我想通過c#和windows窗體來模擬Outlook的搜索功能的最新版本。具體來說,我想爲給定的字符串「搜索所有郵箱」。有超過50個文件夾和90,000封電子郵件。如何通過c#一次在所有Outlook共享郵箱文件夾中「搜索所有郵箱」?
目前,我可以使用LINQ搜索任何一個文件夾並獲得結果。我編寫了一些代碼來遍歷所有文件夾,並創建一個我可以查詢的大規模IEnumberable。
public IEnumerable<MailItem> SharedInbox
{
get
{
outlook.ActiveExplorer().Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
Outlook.Recipient recip = Outlook.Application.Session.CreateRecipient("[email protected]");
Microsoft.Office.Interop.Outlook.MAPIFolder folder =
outlook.GetNamespace("MAPI").GetSharedDefaultFolder(recip, OlDefaultFolders.olFolderInbox);
Folders subFolders = folder.Folders;
IEnumerable<MailItem> mItems = folder.Folders[1].Items.OfType<MailItem>();
if (recip.Resolve())
{
System.Diagnostics.Debug.WriteLine("Email Address Resolve Successful.\r\n");
try
{
foreach (MAPIFolder fold in subFolders)
{
System.Diagnostics.Debug.WriteLine("Try Folder: " + fold.Name + " \r\n");
try
{
mItems = mItems.Concat(fold.Items.OfType<MailItem>());
}
catch
{ System.Diagnostics.Debug.WriteLine("No items found:\r\n"); }
}
return mItems;
}
catch
{
return null;
}
}
else
{
System.Diagnostics.Debug.WriteLine("ELSE");
return null;
}
}
這最終奏效,但你大概可以想象,這極其緩慢,因此是無用的。 我是LINQ的新手,我覺得必須有更快的方式。這個代碼可以調整嗎?我不是Exchange管理員,也無法訪問超出我自己收件箱的Exchange服務器。另外我還沒有和LINQ結婚,並且很樂意使用其他方法。我會感謝你的幫助。
注意:我只注意到上面的代碼是兩次經過文件夾[1]。我可以解決這個問題,但它不會顯着影響所花費的時間。