2015-10-23 1 views
1

Я пытаюсь использовать C# для поиска в моем почтовом ящике Outlook (и всех подпапках) для MailItem, тема которого соответствует моему регулярному выражению.C# Поиск всех папок Outlook для MailItem по темам

В настоящее время у меня есть это:

//InboxItems property 
public IEnumerable<MailItem> InboxItems 
{ 
    get 
    { 
     Microsoft.Office.Interop.Outlook.MAPIFolder folder = 
      outlook.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox); 
      return folder.Items.OfType<MailItem>(); 
    } 
} 

//inside method: 
string ticketid = "6543165"; 
Regex rgx = new Regex(@"^((FWD|RE): ?)*Ticket Diary ?[:-] ([0-9]+)*\b" + ticketid, 
    RegexOptions.IgnoreCase | RegexOptions.Compiled); 
var email = InboxItems.OrderBy(m => m.CreationTime) 
      .FirstOrDefault(m => m.CreationTime >= createdAfter && rgx.IsMatch(m.Subject)); 

Это прекрасно работает, только если адрес электронной почты находится в моей папке Входящие. Тем не менее, я хочу подражать Текущий почтовый ящик функция поиска Outlook, а не Текущая папка.

Я пробовал создать List<MailItem> всех MailItems моей подпапки, но это занимает слишком много времени, чтобы выполнить.

Есть ли эффективный способ запроса подкаталогов Inbox &?

ответ

2

Никогда не перебирайте все элементы в папке или не используйте LINQ с Outlook - это крайне неэффективно.

Использование MAPIFolder.Items.Find/FindNext/Restrict.

Если вы хотите произвести поиск по нескольким папкам, используйте Application.AdvancedSearch - https://msdn.microsoft.com/en-us/library/office/ff866933.aspx

+1

спасибо Дмитрию. Я нашел [Redemption] (http://www.dimastr.com/redemption/) после публикации этого сообщения. Я буду использовать RDO, поскольку он также решит проблему исправления безопасности, с которой я столкнулся! – Zachafer

Смежные вопросы