如何在Excel Script Lab中发送电子邮件?
Excel Script Lab 调用Graph API发送邮件的实现方案
首先明确核心结论:Excel Script Lab 没有预装msgraph-sdk-javascript相关配套支持库,其运行在Office.js沙箱环境中,确实不支持import/require模块引入语法,无法按常规npm包引入方式使用msgraph-sdk-javascript,可通过以下两种路径实现需求:
方案一:直接调用Graph REST接口(推荐,无额外依赖)
这是适配Script Lab环境成本最低的方案,不需要加载任何第三方库:- 调用Office.js内置的SSO能力
Office.auth.getAccessToken()获取Microsoft Graph访问令牌,无需自行实现OAuth授权流程 - 拿到令牌后,通过环境原生支持的
fetch方法构造POST请求,调用Graph的发信接口即可,请求头携带合法授权信息,请求体按接口规范传入收件人、邮件主题、正文等参数
最小可运行示例代码:
async function sendTestEmail() { // 获取Graph访问令牌 const token = await Office.auth.getAccessToken({ allowSignInPrompt: true, forMSGraphAccess: true }); // 构造邮件内容 const mailContent = { message: { subject: "来自Excel Script Lab的测试邮件", body: { contentType: "Text", content: "这是通过Microsoft Graph API发送的测试邮件正文" }, toRecipients: [ { emailAddress: { address: "target@example.com" } } ] }, saveToSentItems: true }; // 发起发信请求 const res = await fetch("https://graph.microsoft.com/v1.0/me/sendMail", { method: "POST", headers: { "Authorization": `Bearer ${token}`, "Content-Type": "application/json" }, body: JSON.stringify(mailContent) }); if (!res.ok) { throw new Error(`发信失败,接口返回状态:${res.status}`); } }- 调用Office.js内置的SSO能力
方案二:加载msgraph-sdk-javascript的UMD浏览器版本
如果需要用到SDK封装的批量请求、分页查询等高级能力,无需使用模块引入语法,直接在Script Lab的HTML编辑面板中通过<script>标签引入SDK的UMD构建产物,引入后全局作用域会直接挂载SDK客户端对象,搭配SSO获取的访问令牌初始化客户端后即可正常调用SDK封装的所有方法。
注意:调用前需要在外接程序权限配置中申请Microsoft Graph的
Mail.Send委托权限,否则接口会返回403无权限错误。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

