You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:45:06