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

Outlook JS API获取邮件MIME内容遇1MB限制及CORS错误如何解决

问题原因说明

你遇到的CORS错误是Exchange Online的固有特性导致的,和你的代码、插件清单配置无关:

  • Exchange Online的EWS端点https://outlook.office365.com/EWS/Exchange.asmx默认没有开放CORS支持,浏览器会拦截所有跨域发起的前端请求,这是浏览器的同源策略强制要求的。Postman能正常请求是因为Postman属于桌面客户端,不受浏览器CORS规则限制。
  • 你在插件清单中添加的AppDomains配置作用是声明Outlook插件任务窗格允许跳转打开的外部域名,和跨域接口请求的CORS放行没有任何关系,所以配置了也不会生效。
  • 微软官方本身就不允许Outlook插件前端直接调用EWS接口,你之前用的makeEwsRequestAsync是Office JS封装的内部接口,本身就做了1MB的大小限制,没有办法绕过这个阈值。
可行解决方案

方案1:使用原生Office JS API获取MIME内容(优先推荐)

现在Office JS 要求集1.8及以上版本已经原生支持直接获取邮件完整MIME内容,没有1MB的大小限制,返回结果默认就是base64编码的EML格式,完全符合你的需求,示例代码如下:

Office.context.mailbox.item.getAsync("mimeContent", function (result) {
    if (result.status === Office.AsyncResultStatus.Succeeded) {
        // result.value就是base64编码的EML内容
        const emlBase64 = result.value;
        console.log(emlBase64);
        // 后续直接发送到第三方系统即可
    } else {
        console.error("获取MIME内容失败:", result.error);
    }
});

目前Exchange Online全量支持该API,不需要额外配置。

方案2:后端代理转发EWS请求

如果你确实需要使用EWS接口完成其他自定义逻辑,可以新增一层后端代理服务:

  1. 前端调用getCallbackTokenAsync拿到令牌、EWS地址、邮件ID,统一发送到你自己的后端服务
  2. 后端服务接收参数后,代替前端向EWS接口发送SOAP请求
  3. 后端拿到EWS返回的MIME内容后,再返回给前端即可
    后端请求不受浏览器CORS规则限制,可以正常调用EWS接口。

内容的提问来源于stack exchange,提问作者Dmytro Pastovenskyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:07