我正在使用Java EWS 库尝试从 Exchange 邮箱同步邮件。我可以获取自上次同步日期以来创建的所有新消息的列表,但是,我真的很想在从 Exchange 加载消息之前找出消息的Message-ID属性。
背景:我正在尝试将 EWS 同步集成到现有的邮件存储系统中。消息 ID 标识仅出于性能原因,因为我们的系统已经在 EWS 之外处理了数百万条消息。必须再次下载它们会导致主要的性能开销。
//Sample code to fetch the message from sync
ChangeCollection<ItemChange> icc = service.syncFolderItems( folder.getId()
, PropertySet.FirstClassProperties // propertySet
, null // ignoredItemIds
, 25 // maxChangesReturned
, SyncFolderItemsScope.NormalItems
, currSyncState );
for ( ItemChange ic : icc )
{
if (ic.getChangeType() == ChangeType.Create)
{
Item item = ic.getItem();
//how to get the Message-ID
}
现在,我看到检索 Message-ID 的最佳方法是在调用ic.getItem().getInternetMessageHeaders()
后调用ic.load()
。但这需要从交换中加载整个消息,我会避免这一步。
编辑:获取 Message-ID 的另一种方法是
EmailMessage em = EmailMessage.bind( service, item.getId() );
em.getInternetMessageId()
但是,这仍然会加载整个消息。
另一种解决方案是通过 ItemId 开始关联消息,但即使这样也不完美:http ://daniellang.net/exchange-web-services-itemid-is-not-permanent/
有关消息 ID 的更多信息:http ://en.wikipedia.org/wiki/Message-ID