You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Service Worker能否激活Outlook加载项?代发邮件方案咨询

问题解答

1. 能否通过Service Worker激活加载项发起EWS请求?

不行。Outlook加载项的核心上下文(Office.context)仅在用户主动触发加载项(比如点击按钮、打开任务窗格)时才会初始化,Service Worker作为独立于页面的后台脚本,无法直接激活加载项或获取有效的Office.js运行环境,因此无法调用Office.context.mailbox.makeEwsRequestAsync方法发送EWS请求。

2. 能否使用Microsoft Graph API在Service Worker中发送邮件?

可以,但需要解决权限令牌的核心问题:

  • 首先,你的Outlook加载项需要在manifest中声明Mail.Send权限,并在用户首次交互时完成OAuth授权,获取访问令牌和刷新令牌,将这些令牌存储在IndexedDB或Cache Storage中(Service Worker可直接访问这些存储)。
  • 在Service Worker中,读取存储的令牌,若令牌过期则用刷新令牌获取新的访问令牌,之后直接调用Graph API发送邮件。

示例代码(Service Worker中发送Graph请求)

// 假设已从存储中获取到有效的访问令牌
const accessToken = "YOUR_ACCESS_TOKEN";
const emailPayload = {
  message: {
    subject: "处理后的邮件主题",
    body: {
      contentType: "HTML",
      content: "<p>这是处理后的邮件正文</p>"
    },
    toRecipients: [
      {
        emailAddress: {
          address: "recipient@example.com"
        }
      }
    ]
  },
  saveToSentItems: true
};

fetch("https://graph.microsoft.com/v1.0/me/sendMail", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${accessToken}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify(emailPayload)
})
.then(response => {
  if (!response.ok) throw new Error(`请求失败: ${response.status}`);
  console.log("邮件发送成功");
})
.catch(error => {
  console.error("发送邮件出错:", error);
});

关键注意事项

  • 令牌管理:必须确保Service Worker能获取到有效的访问令牌,提前处理令牌过期的刷新逻辑。
  • 权限配置:在加载项manifest中正确声明Graph权限,示例配置如下:
    <WebApplicationInfo>
      <Id>YOUR_APP_ID</Id>
      <Resource>https://graph.microsoft.com</Resource>
      <Scopes>Mail.Send</Scopes>
    </WebApplicationInfo>
    
  • CORS:Microsoft Graph API支持跨域请求,Service Worker中发送请求无需额外配置CORS。

内容的提问来源于stack exchange,提问作者hlaliberte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:40:16