1

我正在尝试在 Exchange Online 帐户(即不带 Office 的 Office 365)中的文件夹之间移动邮件。

这可能(并且确实,根据我的观察)导致消息 ItemId 值发生变化。

根据 MoveItem 的文档,有一个 XML 标记 ReturnNewItemIds 用于请求要返回的新 ItemId 值:

http://msdn.microsoft.com/en-us/library/exchange/aa564512(v=exchg.150).aspx

此标记记录为受 Exchange Online 支持:

http://msdn.microsoft.com/en-us/library/exchange/ff709497(v=exchg.150).aspx

当我在请求中包含此标记时,服务器总是返回 HTTP 状态代码 500,内部服务器错误(正如我所见,这意味着它不喜欢该请求)。

删除 ReturnNewItemIds 标记使操作成功,但我当然没有得到新的 ItemId 值。

这是一个示例请求:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <soap:Body>
    <MoveItem
        xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
        <ToFolderId>
            <t:FolderId Id="...[snip]...AAUBzh5AAA="/>
        </ToFolderId>
        <ItemIds>
            <t:ItemId Id="...[snip]...da2BGjjDAAAUBziGAAA=" />
        </ItemIds>
        <ReturnNewItemIds>true</ReturnNewItemIds>
    </MoveItem>
  </soap:Body>
</soap:Envelope>

我尝试了不同的方法来指定 ReturnNewItemIds,大写 True,只包括标签......没有区别。不过,很确定上面显示的方式是正确的——它是记录在案的,它还通过了 XML 模式验证。

有多种方法可以解决此问题以获取新的 ItemId 值,但它们需要额外的 EWS 操作,这既费时又费流量。

有没有人遇到过这个?

这可能是 Exchange Online 的特定问题吗?也许有关 ExchangeOnline 支持的文档有误?

或者我是否遗漏了一些东西并且有办法让 ReturnNewItemIds 去做它的事情?

我的测试环境是 wget,其中包含包含请求的 XML 文件和设置正确 HTTP 选项的 shell 脚本。我需要执行的任何其他 EWS 请求都没有问题。

4

1 回答 1

2

我可以重现你的问题。您缺少最小 RequestServerVersion.Version 为 Exchange2010_SP1 的 SOAP 标头。请添加以下 SOAP 标头,我希望这会起作用。

  <soap:Header>
    <t:RequestServerVersion Version="Exchange2010_SP1" />
  </soap:Header> 

带着敬意,

迈克尔·迈纳(微软)

于 2013-10-24T19:19:42.547 回答