Outlook网页版/新Outlook OnSend中saveAsync调用失败问题排查
排查方向与解决方案
1. 调整OnSend触发后的执行时机
Outlook网页版1月30日的更新可能改变了OnSend事件的触发时机,新建邮件在触发时可能还没完成服务器端初始化。试试在调用saveAsync前加个短暂延迟,或者先校验邮件对象的有效性:
// 示例:延迟500ms后执行保存操作 setTimeout(() => { Office.context.mailbox.item.saveAsync((result) => { if (result.status === Office.AsyncResultStatus.Succeeded) { // 继续执行Graph API发送逻辑 } else { // 处理错误 } }); }, 500); // 可根据实际情况调整延迟时长
2. 换种方式获取草稿ID
既然OnSend场景下saveAsync报错,别死磕这个方法:
- 先检查
Office.context.mailbox.item.itemId是否有值,部分版本的Office JS在OnSend触发时可能已经生成了临时草稿ID; - 如果itemId为空,直接用Graph API筛选当前用户的草稿箱,结合邮件主题、收件人等唯一标识定位目标邮件:
async function getTargetDraftId() { const subject = Office.context.mailbox.item.subject; const accessToken = await getYourAccessToken(); // 替换成你的获取token逻辑 const res = await fetch(`https://graph.microsoft.com/v1.0/me/messages?$filter=subject eq '${subject}' and isDraft eq true`, { headers: { 'Authorization': `Bearer ${accessToken}` } }); const messages = await res.json(); return messages.value[0]?.id; }
3. 锁定Office JS版本排查
检查当前使用的Office JS版本(通过console.log(Office.version)查看),如果是1月30日更新后出现的问题,试试锁定到之前的稳定版本(比如指定CDN链接为https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js),看问题是否消失。如果锁定版本后正常,说明是新版本的兼容性问题。
4. 排查网络与权限细节
报错提示“Connection error”,虽然手动保存正常,但OnSend场景下的请求链路可能不同:
- 用浏览器开发者工具监控
saveAsync对应的网络请求,看是否有4xx/5xx的异常响应; - 确认插件权限清单里是否包含
Mail.ReadWrite,权限不足也可能导致服务器拒绝保存请求。
5. 提交官方反馈
如果以上方法都没用,基本可以确定是平台更新引入的bug。直接去Office开发者中心提交反馈,附上这些信息:
- 插件清单里的OnSend配置片段;
- 报错的完整信息(包括Office版本、浏览器类型);
- 能复现问题的详细步骤。
内容的提问来源于stack exchange,提问作者Victor Calarasu
相关产品推荐
相关产品推荐

