Office-JS Outlook 2019加载项设置X-Headers发送丢失如何解决
答复
代码有效性判定
你编写的通过SingleValueExtendedProperties设置自定义X-Header的代码逻辑符合Exchange REST API扩展属性操作规范,不存在错误。服务端可查询到已写入的扩展属性,已经验证了代码功能的正确性。
出现发送时属性丢失的问题,核心原因是桌面版Outlook的本地缓存同步机制:你直接通过接口修改服务端草稿的属性后,Outlook本地缓存的草稿副本未同步最新的服务端状态,发送时使用本地旧版本草稿覆写了服务端内容,导致新增的扩展属性被覆盖移除。
属性丢失问题解决方案
针对你当前的环境限制(Exchange 2016仅支持Office JS API 1.5,无法使用1.8版本以上才提供的原生setCustomHeaders方法),可采取以下适配方案:
- 完成REST API属性写入操作后,主动调用
Office.context.mailbox.item.load()方法,强制触发Outlook从服务端拉取最新草稿状态,确认本地缓存与服务端一致后再允许用户执行保存、发送操作 - 增加运行环境判断逻辑:桌面版Outlook环境优先使用makeEwsRequestAsync执行属性写入,OWA环境优先使用REST API方案,匹配不同环境的兼容性表现
- 针对Office 365版本的Outlook 2019,可先判断当前Office JS API支持版本,若支持1.8及以上版本优先调用原生
setCustomHeaders方法,直接操作本地草稿对象,从根源避免同步不一致问题 - 针对本地部署的Outlook 2019 1808版本,可在加载项中监听邮件发送事件,在发送前的回调中再执行一次属性写入操作,避免发送前的临时操作导致属性丢失
测试结果汇总
| Outlook 2019 build 2108(Office 365版本) | Outlook 网页版 | Outlook 2019 build 1808(搭配Exchange 2016) | Exchange 2016 OWA | |
|---|---|---|---|---|
| Exchange REST API XMLHttpRequest调用 | X-Custom-header在服务端设置成功,但从Outlook发送草稿时被移除。若在Outlook加载项中设置X-header后,通过OWA打开并发送该草稿,X-Custom-header会被保留 | 正常运行 | X-Custom-header在服务端设置成功,但从Outlook发送草稿时被移除。若在Outlook加载项中设置X-header后,通过OWA打开并发送该草稿,X-Custom-header会被保留 | 正常运行 |
| makeEwsRequestAsync()调用 | 正常运行 | 正常运行 | X-Custom-header在服务端设置成功,但从Outlook发送草稿时被移除。若在Outlook加载项中设置X-header后,通过OWA打开并发送该草稿,X-Custom-header会被保留 | EWS请求代理错误 |
内容的提问来源于stack exchange,提问作者kjack51
相关产品推荐
相关产品推荐

