Мне нужно написать метод в C #, который использует управляемый API-интерфейс Exchange Web Services (EWS) для чтения электронных писем из почтового ящика и, учитывая ItemId / UniqueId текущего электронного письма, возвращает ItemId / UniqueId следующего электронного письма вВходящие после текущей электронной почты.
Кроме того, по разным причинам я требую, чтобы метод был статическим методом без сохранения состояния, то есть он не может полагаться на какие-либо глобальные переменные-члены, которые сохраняются между вызовами метода.Таким образом, я не могу просто сохранить ссылку на экземпляр объекта FindItemsResults и переходить к следующему элементу при каждом вызове метода.
Я попытался реализовать метод с использованием следующего кода (только в упрощенном примере,без проверки ошибок):
using Microsoft.Exchange.WebServices;
using Microsoft.Exchange.WebServices.Data;
...
...
public string GetNextEmailId(string currentItemId)
{
// set up Exchange Web Service connection
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.AutodiscoverUrl("example.user@contoso.com");
// create SearchFilter to find next email after current email
ItemId itemId = new ItemId(currentItemId);
SearchFilter sfNextEmail = new SearchFilter.IsGreaterThan(EmailMessageSchema.Id, itemId);
// find next email in inbox
ItemView itemView = new ItemView(1);
itemView.OrderBy.Add(EmailMessageSchema.DateTimeReceived, SortDirection.Ascending);
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, sfNextEmail, itemView);
// return unique ID of next email
return findResults.Items[0].Id.UniqueId;
}
Однако, когда я запускаю этот метод, он выдает следующее исключение из строки service.FindItems:
System.ArgumentException: «Проверка не удалась. Имя параметра: searchFilter«
Внутреннее исключение - Microsoft.Exchange.WebServices.Data.ServiceValidationException:« Значения типа «ItemId» не могут быть значениями сравнения в поисковых фильтрах ».
Один из вариантов - использовать FindItems, чтобы найти все электронные письма в папке «Входящие» и выполнить их проверку, проверяя ItemId до тех пор, пока я не найду текущее письмо, а затем перейти к следующему и вернуть его уникальный идентификатор.Но я думаю, что это будет медленно и неэффективно.Я надеюсь, что есть лучший способ достичь этого.
Любая помощь или предложения будут с благодарностью.Мне не удалось найти какие-либо решения для поиска в Интернете.