Outlook Web Addin如何通过Office JS获取收件箱全部邮件
Office JS 收件箱邮件枚举/按ID查询实现方案
可行性结论
完全可以实现你提到的两个需求。你当前使用的Office.context.mailbox.item属于上下文级API,仅能获取当前窗口选中/预览的单封邮件,本身不支持直接遍历文件夹内全量内容,需要结合Office JS提供的令牌能力调用对应邮件接口完成需求。
具体实现方法
1. 列出收件箱所有邮件
Office JS没有提供直接遍历文件夹邮件的原生方法,按以下步骤操作即可:
- 首先修改加载项清单文件,将权限配置为
ReadWriteMailbox,低于该权限无法拿到访问全量邮件的有效令牌。 - 调用
getCallbackTokenAsync方法获取REST接口访问令牌,再请求收件箱邮件列表接口即可,示例代码:
Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, (res) => { if (res.status !== Office.AsyncResultStatus.Succeeded) return; const accessToken = res.value; const restBaseUrl = Office.context.mailbox.restUrl; // 拉取收件箱邮件列表 fetch(`${restBaseUrl}/v2.0/me/mailfolders/inbox/messages`, { headers: { Authorization: `Bearer ${accessToken}` } }).then(resp => resp.json()).then(res => { const mailList = res.value; // 收件箱内的邮件列表数据 console.log(mailList); }) });
2. 按指定邮件ID获取单封邮件详情
该场景不需要配置ReadWriteMailbox高权限,最低ReadItem权限即可支持,有两种可落地的实现方式:
- 方式一:REST接口查询
如果你拿到的是EWS格式的邮件ID,先调用convertToRestId转换为REST兼容格式,再直接请求对应邮件详情接口即可,示例代码:// 传入已知的目标邮件ID(EWS格式) const targetEwsItemId = "你持有的邮件ID"; const restFormatId = Office.context.mailbox.convertToRestId( targetEwsItemId, Office.MailboxEnums.RestVersion.v2_0 ); Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, (res) => { if (res.status !== Office.AsyncResultStatus.Succeeded) return; const accessToken = res.value; const restBaseUrl = Office.context.mailbox.restUrl; fetch(`${restBaseUrl}/v2.0/me/messages/${restFormatId}`, { headers: { Authorization: `Bearer ${accessToken}` } }).then(resp => resp.json()).then(mailDetail => { console.log(mailDetail); // 对应ID的完整邮件详情 }) }); - 方式二:EWS原生请求查询
直接调用makeEwsRequestAsync方法,传入EWS标准的GetItem请求体,填入目标邮件ID即可获取详情,不需要额外做ID格式转换。
注意:如果你的加载项需要兼容移动端Outlook、2016及更早版本的桌面端Outlook,需要提前确认对应客户端支持的API要求集版本,避免接口调用失败。
内容的提问来源于stack exchange,提问作者muscularpanther
相关产品推荐
相关产品推荐

