如何通过Outlook JS API获取收件箱所有邮件?React开发Office加载项求助
当然可以!用React开发Outlook加载项时,要获取收件箱或指定文件夹的全部邮件并执行操作,你需要结合Office.js的Mailbox API和Microsoft Graph API来实现——毕竟
Office.context.mailbox确实主要聚焦在当前选中的邮件,但Graph能帮你拿到批量邮件数据。 核心实现思路
Office.js提供了获取访问令牌的能力,用这个令牌就能调用Microsoft Graph API,从而访问用户的所有邮件文件夹和邮件内容。下面是具体的步骤和React示例:
1. 配置加载项权限
首先要在你的加载项manifest.xml文件中声明足够的权限,这样才能获取到访问Graph的令牌。比如需要读取邮件的话,添加:
<Permissions>ReadMailbox</Permissions>
如果需要修改邮件,就用ReadWriteMailbox。这个权限会决定令牌能访问的Graph资源范围。
2. 获取Graph兼容的访问令牌
用Office.context.mailbox.getCallbackTokenAsync方法获取令牌,记得设置isRest: true参数,这样拿到的令牌可以直接用于Graph API请求:
// React组件中的异步函数示例 const getGraphToken = async () => { return new Promise((resolve, reject) => { Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, (result) => { if (result.status === Office.AsyncResultStatus.Succeeded) { resolve(result.value); } else { reject(new Error(`获取令牌失败: ${result.error.message}`)); } }); }); };
3. 调用Graph API获取收件箱邮件
拿到令牌后,就可以发起请求获取收件箱的邮件了:
const fetchInboxMessages = async () => { try { const token = await getGraphToken(); const response = await fetch('https://graph.microsoft.com/v1.0/me/mailfolders/inbox/messages', { headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' } }); if (!response.ok) { throw new Error(`Graph请求失败: ${response.status} ${response.statusText}`); } const data = await response.json(); // data.value就是收件箱的邮件列表,默认返回前10条,支持分页 console.log('收件箱邮件:', data.value); return data.value; } catch (err) { console.error('获取邮件出错:', err); throw err; } };
4. 访问指定文件夹的邮件
如果要获取非收件箱的其他文件夹,首先需要获取目标文件夹的ID:
// 获取所有邮件文件夹 const fetchMailFolders = async () => { const token = await getGraphToken(); const response = await fetch('https://graph.microsoft.com/v1.0/me/mailfolders', { headers: { Authorization: `Bearer ${token}` } }); const data = await response.json(); // 找到目标文件夹,比如"已发送邮件" const targetFolder = data.value.find(folder => folder.displayName === "已发送邮件"); return targetFolder?.id; };
拿到文件夹ID后,替换Graph请求的端点:
const folderId = await fetchMailFolders(); const response = await fetch(`https://graph.microsoft.com/v1.0/me/mailfolders/${folderId}/messages`, { headers: { Authorization: `Bearer ${token}` } });
5. 对邮件执行操作
获取到邮件列表后,你可以通过Graph API执行各种操作:
- 标记已读/未读:
PATCH https://graph.microsoft.com/v1.0/me/messages/{message-id},请求体{ "isRead": true } - 移动邮件:
POST https://graph.microsoft.com/v1.0/me/messages/{message-id}/move,请求体{ "destinationId": "{folder-id}" } - 删除邮件:
DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
注意事项
- 分页处理:Graph API默认每次返回10条邮件,如果邮件数量多,需要用
$top参数指定每页数量,以及@odata.nextLink来获取下一页数据 - 初始化时机:在React组件中调用Office.js方法时,要确保Office已经初始化完成(可以在
Office.initialize回调后执行相关逻辑) - 权限验证:测试时确保你的Outlook账号有对应的邮件访问权限,加载项也已正确部署调试
内容的提问来源于stack exchange,提问作者scottyak12
相关产品推荐
相关产品推荐

