Exchange本地环境下,Office.js ≤1.5或EWS删除邮件附件的方案咨询
问题:Exchange本地环境下基于Office.js 1.5的Outlook加载项删除邮件附件方案
我正在为Exchange On-Premises服务器开发Outlook加载项,受Exchange本地环境限制仅支持Office.js 1.5及以下版本。但Office.js v1.5中没有删除邮件附件的内置API。我尝试使用Exchange Web Services(EWS)的DeleteAttachment API,在SOAP UI中测试正常,但通过Outlook加载项的makeEWSRequestAsync调用时,发现该API不在允许的EWS操作列表内。在此约束下,是否有通过Office.js或其他替代方法在Exchange本地环境中删除邮件附件的可行方案?
可行解决方案思路
1. 用EWS UpdateItem操作替代DeleteAttachment
虽然DeleteAttachment被加载项的EWS权限限制,但可以通过UpdateItem操作修改邮件的附件集合,间接移除目标附件。具体步骤:
- 先调用
makeEWSRequestAsync发送GetItem请求,获取当前邮件的所有附件ID和邮件自身的ItemId、ChangeKey - 构造
UpdateItem的SOAP请求,将邮件的Attachments字段替换为仅包含需要保留的附件ID的集合 - 发送该请求完成附件移除
核心SOAP请求示例:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"> <soap:Header> <t:RequestServerVersion Version="Exchange2013" /> </soap:Header> <soap:Body> <UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AutoResolve" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"> <ItemChanges> <t:ItemChange> <t:ItemId Id="[邮件ItemId]" ChangeKey="[邮件ChangeKey]" /> <t:Updates> <t:SetItemField> <t:FieldURI FieldURI="item:Attachments" /> <t:Message> <t:Attachments> <!-- 仅保留需要留下的附件,移除目标附件 --> <t:FileAttachment> <t:AttachmentId Id="[保留的附件ID1]" /> </t:FileAttachment> <t:FileAttachment> <t:AttachmentId Id="[保留的附件ID2]" /> </t:FileAttachment> </t:Attachments> </t:Message> </t:SetItemField> </t:Updates> </t:ItemChange> </ItemChanges> </UpdateItem> </soap:Body> </soap:Envelope>
2. 部署Exchange本地自定义中转服务
如果UpdateItem也受权限限制,可以在Exchange服务器上部署一个自定义Web服务(如ASP.NET Web API),通过服务端直接调用EWS执行删除附件操作:
- 自定义服务接收邮件ID和目标附件ID作为参数
- 服务端使用EWS Managed API或直接构造
DeleteAttachment的SOAP请求(服务端不受加载项的EWS操作限制) - 将操作结果返回给Outlook加载项
- 加载项通过
XmlHttpRequest调用该自定义服务完成操作
3. 邮件副本/转发间接移除附件(备选方案)
如果上述技术方案都无法实施,可采用体验稍差的间接方式:
- 使用Office.js 1.5的
mailbox.item.copyAsync或forwardAsync创建当前邮件的副本/转发草稿 - 遍历副本的附件,移除目标附件(Office.js 1.5支持获取附件列表,可通过删除草稿中的附件实现)
- 保存新邮件后,提示用户删除原邮件(需用户授权)
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

