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

如何在Node.js应用中通过node-ews从基础认证升级至OAuth2认证发邮件?

从基础认证升级到OAuth2认证的具体操作

1. 完成Azure AD应用注册

  • 登录Azure门户,注册新应用程序(根据场景选择账户类型,比如“任何组织目录中的用户”)
  • 添加API权限:为Exchange Online添加EWS.AccessAsUser.All委托权限,完成管理员同意(租户级应用需此步骤)
  • 生成客户端密码(或配置证书认证,生产环境优先选证书)
  • 记录客户端ID、租户ID、客户端密码/证书信息,后续配置会用到

2. 实现OAuth2令牌获取逻辑

node-ews支持传入OAuth2令牌,无需替换库,只需替换原基础认证的逻辑:

  • 移除原配置中的username和password认证参数
  • 用@azure/msal-node库处理令牌获取,示例代码:
    const { PublicClientApplication } = require('@azure/msal-node');
    
    const msalConfig = {
      auth: {
        clientId: '你的客户端ID',
        authority: 'https://login.microsoftonline.com/你的租户ID'
      }
    };
    
    const pca = new PublicClientApplication(msalConfig);
    
    async function getAccessToken() {
      const tokenRequest = {
        scopes: ['https://outlook.office365.com/EWS.AccessAsUser.All'],
        // 仅测试场景用用户名密码流,生产环境禁用
        // username: '用户邮箱地址',
        // password: '用户密码'
        // 生产推荐授权码流(用户交互登录)或客户端凭证流(后台服务)
      };
    
      const response = await pca.acquireTokenByUsernamePassword(tokenRequest);
      return response.accessToken;
    }
    
  • 注意:生产环境绝对不要用用户名密码流,根据应用类型选择合适的授权方式

3. 配置node-ews使用OAuth2令牌

创建node-ews实例时,传入获取到的访问令牌,示例:

const EWS = require('node-ews');

async function sendEmail() {
  const accessToken = await getAccessToken();
  const ewsConfig = {
    username: '用户邮箱地址', // 仍需传入邮箱,无需密码
    host: 'outlook.office365.com',
    auth: {
      bearer: accessToken
    }
  };

  const ews = new EWS(ewsConfig);
  // 原有邮件发送逻辑保持不变,比如调用ews.send()方法
}

4. 处理令牌过期

  • OAuth2访问令牌有效期通常为1小时,@azure/msal-node会自动处理令牌缓存与刷新,无需手动实现
  • 确保应用在令牌过期前能自动获取新令牌,避免发送失败

5. 测试验证

  • 测试邮件发送功能,确认OAuth2认证正常生效
  • 查看Azure AD日志,排查认证请求是否存在错误
  • 校验API权限配置,避免出现权限不足的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:21:37