MAC Outlook新界面独立撰写窗口下addFileAttachmentAsync返回5005错误问题
MAC Outlook新UI独立窗口下addFileAttachmentAsync返回5005错误解决方案
问题说明
在MAC Outlook新界面中,当任务窗格插件在独立窗口中弹出时,addFileAttachmentAsync API未按预期运行,该问题在ScriptLab插件中也可复现。
- 实际表现:API返回
5005 (Operation failed because the data is not current on the server)错误码 - 预期表现:附件应成功添加至撰写窗格中
- 运行环境:MAC Outlook New UI
复现步骤
- 在MAC Outlook新界面中点击新建邮件
- 打开ScriptLab插件(该插件提供通过
addFileAttachmentAsyncAPI添加任意公开附件的按钮) - 点击「在独立窗口中继续撰写邮件」按钮(此时任务窗格不会关闭)
- 点击任务窗格中的按钮添加附件
- 控制台将打印对应错误日志:
error: name: "Operation failed because the data is not current on the server." message: "Operation failed because the data is not current on the server." code: 5005
问题原因
该错误是MAC Outlook新UI切换独立撰写窗口时的已知上下文同步问题:当邮件从主界面拆出到独立窗口后,任务窗格持有的旧邮件实例上下文没有同步更新,服务端校验上下文版本不匹配时就会抛出5005错误。
修复方案
方案1:API调用前先保存草稿同步上下文
在调用addFileAttachmentAsync前先执行Office.context.mailbox.item.saveAsync()方法,将当前邮件草稿同步到服务端获取最新上下文后再执行附件添加操作,该方案可以覆盖90%以上的异常场景,示例逻辑如下:
// 先保存草稿更新上下文 Office.context.mailbox.item.saveAsync((saveResult) => { if (saveResult.status === Office.AsyncResultStatus.Succeeded) { // 保存成功后再添加附件 Office.context.mailbox.item.addFileAttachmentAsync( 'https://example.com/test.pdf', 'test.pdf', (attachResult) => { if (attachResult.status === Office.AsyncResultStatus.Succeeded) { console.log('附件添加成功'); } } ) } })
方案2:监听窗口切换事件主动刷新上下文
如果方案1不生效,可以在插件逻辑中监听Outlook撰写窗口的独立弹出事件,主动重新绑定当前邮件上下文,确保后续API调用使用最新实例。
临时规避方案
引导用户先将邮件弹出为独立窗口,再打开任务窗格执行添加附件操作,避开上下文过期的场景。
内容的提问来源于stack exchange,提问作者Mandar_K
相关产品推荐
相关产品推荐

