使用EWS召回邮件报错ErrorInvalidRequest,求正确实现方法
解决EWS邮件召回的ErrorInvalidRequest错误
你的SOAP请求返回ErrorInvalidRequest的核心原因是元素命名空间错误,还可能缺少必要参数。以下是修正后的请求和关键注意事项:
修正后的SOAP请求
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"> <soap:Header> <t:RequestServerVersion Version="Exchange2010_SP2"/> <!-- 需添加对应身份验证头信息,比如Basic Auth或WS-Trust令牌 --> </soap:Header> <soap:Body> <m:RecallItem> <m:ItemIds> <t:ItemId Id="[ItemId]" ChangeKey="[ChangeKey]"/> </m:ItemIds> <m:DeleteType>SendOnly</m:DeleteType> <m:SuppressReadReceipts>false</m:SuppressReadReceipts> </m:RecallItem> </soap:Body> </soap:Envelope>
关键修正点
- 命名空间调整:
RecallItem的子元素ItemIds、DeleteType、SuppressReadReceipts属于messages命名空间(前缀m),而非types命名空间(前缀t),原请求错误给这些元素加了t:前缀,导致请求结构无效。 - 补充ChangeKey:部分旧Exchange版本可能允许仅传ItemId,但为了兼容性和正确性,建议同时带上目标邮件的ChangeKey(可通过GetItem请求获取)。
- 明确前缀归属:给messages命名空间指定m前缀,避免元素归属混淆。
额外注意事项
- 邮件召回仅对未被收件人读取的邮件生效,且仅限同一Exchange组织内的收件人。
- 确保
RequestServerVersion的版本与目标Exchange服务器版本匹配,若服务器版本更高,可调整为对应版本(如Exchange2013、Exchange2016等)。 - 发起请求的账号必须是目标邮件的发件人,且拥有该邮件的修改权限。
内容的提问来源于stack exchange,提问作者catFly
相关产品推荐
相关产品推荐

