2014-02-05 5 views
2

Мне нужно получить все электронные письма с указанием определенной категории, как бы я это сделал?Поиск по категориям Exchange Server EWS

Сейчас у меня есть это:

var col = new List<SearchFilter>(); 
col.Add(new SearchFilter.ContainsSubstring(ItemSchema.Categories, "Processed")); 
var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, col.ToArray()); 

FindItemsResults<Item> findResults = service.FindItems(
    WellKnownFolderName.Inbox, 
    filter, 
    new ItemView(10) 
); 

Но это дает мне Microsoft.Exchange.WebServices.Data.ServiceResponseException, который говорит {"The Contains filter can only be used for string properties."}

Как мне это сделать?

ответ

2

AFAIK с Exchange 2010, категория представляет собой многозначное поле, поэтому оно не работает с поисковыми фильтрами. Однако вы можете искать категории с помощью AQS. Следующий код должен сделать трюк.

ExchangeService service = GetService(); 

var iv = new ItemView(1000); 
string aqs = "System.Category:Processed"; 
FindItemsResults<Item> searchResult = null; 
do 
{ 
    searchResult = service.FindItems(WellKnownFolderName.Inbox, aqs, iv); 
    foreach (var item in searchResult.Items) 
    { 
     Console.WriteLine(item.Subject); 
    } 
    iv.Offset += searchResult.Items.Count; 
} while (searchResult.MoreAvailable == true); 
+0

Большое спасибо! Вы знаете, как искать электронные письма, которые НЕ имеют категорию «Обработано»? – user3182508

+1

@ user3182508: Все, что вам нужно сделать, это использовать NOT: string aqs = "NOT System.Category: Processed"; –

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