Я хочу подражать последней версии функции поиска Outlook с помощью C# и формы окна. В частности, я хочу «Искать все почтовые ящики» для данной строки. Есть более 50 папок и 90 000 писем.Как я могу «найти все почтовые ящики» во всех папках общего почтового ящика Outlook через C#?
В настоящее время я могу искать любую папку с помощью 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]. Я могу это исправить, но это существенно не влияет на время, которое требуется.