如何通过给出开始日期和结束日期以ews的形式获取邮件

时间:2018-10-10 12:50:15

标签: java exchangewebservices

我对EWS邮件相关主题非常陌生。我的任务是获取2个日期之间的所有邮件。

我尝试了其他几种方法,但是没有达到预期的效果。

SearchFilter filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, greaterthanfilter); 

我们如何通过提供开始日期和结束日期来从EWS邮件服务器中获取邮件?

1 个答案:

答案 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应该只包含您需要阅读的属性。