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]을 두 번 통과하는 것으로 나타났습니다. 문제를 해결할 수는 있지만 시간이 많이 걸리는 것은 아닙니다.