【问题标题】:Exchange Web Services get Message Message-IDExchange Web 服务获取消息 Message-ID
【发布时间】:2014-08-13 19:01:38
【问题描述】:

我正在使用Java EWS library 尝试同步来自 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.load() 之后调用 ic.getItem().getInternetMessageHeaders()。但这需要从交换中加载整个消息,我会避免这一步。

编辑:获取 Message-ID 的另一种方法是

EmailMessage em = EmailMessage.bind( service, item.getId() );
em.getInternetMessageId()

但是,这仍然会加载整个消息。

另一种解决方案是通过 ItemId 开始关联消息,但这并不完美:http://daniellang.net/exchange-web-services-itemid-is-not-permanent/

关于 Message-ID 的更多信息:http://en.wikipedia.org/wiki/Message-ID

【问题讨论】:

标签: java exchangewebservices ewsjavaapi


【解决方案1】:

我相信解决方案是这样的:

EmailMessage em = EmailMessage.bind( service, item.getId(),
                   new PropertySet( EmailMessageSchema.InternetMessageId) );

解释:

我们必须将项目绑定到电子邮件消息,但不是获取所有信息,而是仅通过 PropertySet 参数询问 ID 和我们想要的任何其他属性。

受此答案启发:https://stackoverflow.com/a/22482779/138228

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多