我正在尝试在 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 请求都没有问题。