I'm using the Java EWS library to try to sync messages from an Exchange mailbox. I'm able to get a list off all new messages created since the last sync date, however, I would really like to find out the Message-ID property of the message before loading it from exchange.
Background: I'm trying to integrate EWS sync into an existing mail storage system. The Message-ID identification is solely for performance reasons, as our system already has millions of messaged processed outside of EWS. Having to download them again would cause major performance overhead.
//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 }
Right now, the best way I see to retrieve the Message-ID is by calling ic.getItem().getInternetMessageHeaders()
after calling ic.load()
. But that requires loading the entire message from exchange, and I would to avoid this step.
Edit: Another way to grab the Message-ID is
EmailMessage em = EmailMessage.bind( service, item.getId() ); em.getInternetMessageId()
However, that still loads the entire message.
The other solution is to start associating messages by the ItemId, but even that's not perfect: http://daniellang.net/exchange-web-services-itemid-is-not-permanent/
More about Message-ID: http://en.wikipedia.org/wiki/Message-ID