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]。我可以解决这个问题,但它不会显着影响所花费的时间。