我对EWS邮件相关主题非常陌生。我的任务是获取2个日期之间的所有邮件。
我尝试了其他几种方法,但是没有达到预期的效果。
SearchFilter filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, greaterthanfilter);
我们如何通过提供开始日期和结束日期来从EWS邮件服务器中获取邮件?
答案 0 :(得分:0)
您的comment中的代码是正确的方向:
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个字节 流媒体属性。对于Unicode,它返回前255个字符 通过使用以空字符结尾的Unicode字符串。它不返回任何 邮件正文格式或收件人列表。 FindItem将返回 收件人摘要。您可以使用
GetItem
操作来获取 项目的详细信息。
来源:MS Doc FindItem Operation
如果您需要不返回的属性,则最好将请求限制为仅返回项目的ID。由于每个ItemSchema.Id
仅返回Item
,因此这可能会加速服务器端的处理。
ItemView view = new ItemView(128);
view.setPropertySet(PropertySet.IdOnly);
现在遍历FindItemsResults<Item> items
:
for (Item item : items) {
EmailMessage email = EmailMessage.bind(service, item.getId(), propertySet);
// process the email
}
propertySet
应该只包含您需要阅读的属性。