Код в вашем комментарии направлен в правильном направлении:
protected FindItemsResults<Item> getEmailsInTimeRange(ExchangeService service, Date from, Date to) throws Exception {
ItemView view = new ItemView(128);
SearchFilter fromFilter = new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived, from);
SearchFilter toFilter = new SearchFilter.IsLessThan(ItemSchema.DateTimeReceived, to);
SearchFilter inRangeFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, fromFilter, toFilter);
FindItemsResults<Item> items = service.findItems(WellKnownFolderName.Inbox, inRangeFilter, view);
return items;
}
Но запомните :
Операция FindItemвозвращает только первые 512 байт любого свойства streamable.Для Unicode он возвращает первые 255 символов, используя завершенную нулем строку Unicode.Он не возвращает ни один из форматов тела сообщения или списков получателей.FindItem вернет резюме получателя.Вы можете использовать операцию GetItem
для получения сведений об элементе.
Источник: MS Doc Операция FindItem
Если вам нужны свойства, которые не 'т, то лучше ограничить запрос на возврат только идентификаторов предметов.Это потенциально ускорит обработку на стороне сервера, поскольку для каждого Item
.
ItemView view = new ItemView(128);
view.setPropertySet(PropertySet.IdOnly);
требуется только ItemSchema.Id
. Теперь итерируйте по FindItemsResults<Item> items
:
for (Item item : items) {
EmailMessage email = EmailMessage.bind(service, item.getId(), propertySet);
// process the email
}
.propertySet
должен содержать только те свойства, которые необходимо прочитать.