我正在尝试在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 操作,这既耗时又耗费流量。
有人遇到过这种情况吗?
这可能是在线交换的特定问题吗?也许文档对ExchangeOnline支持是错误的?
还是我错过了一些东西,有办法让 ReturnNewItemId 做它的事情?
我的测试环境是wget,其中包含包含请求的XML文件和设置正确HTTP选项的shell脚本。我需要执行的任何其他 EWS 请求都没有问题。
我可以重现您的问题。您缺少具有最低 RequestServerVersion.Version 的 SOAP 标头 Exchange2010_SP1。请添加以下 SOAP 标头,我希望这会起作用。
<soap:Header>
<t:RequestServerVersion Version="Exchange2010_SP1" />
</soap:Header>
问候,
迈克尔·迈纳〔Microsoft〕