You need to enable JavaScript to run this app. 如何基于Node JS实现多用户邮箱账号的自动邮件发送
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Node JS实现多用户邮箱账号的自动邮件发送

基于OAuth2的多用户Gmail自有邮箱自动发信落地方案

核心逻辑基础

你已经实现的单账号发信逻辑,仅需将公共发件账号的鉴权配置,替换为每个用户单独授权拿到的、带gmail.send权限的refresh_token,即可实现从用户自有邮箱发起发信的效果,全程无需用户提供邮箱账号密码。

前置环境配置

  • 在Google Cloud控制台完成项目配置:创建对应项目、启用Gmail API,配置OAuth同意屏时,务必将应用发布状态调整为生产模式——测试模式下refresh token仅7天有效期,完全无法支撑长期自动发信场景;同时在同意屏内添加gmail.send权限范围。
  • 生成Web应用类型的OAuth客户端凭据,配置合法的回调重定向地址,拿到全局共用的client_id和client_secret,所有用户的授权流程都复用这两个值,不需要为每个用户单独生成。

用户授权流程(获取长效refresh token)

这部分是多用户场景和单账号场景的核心差异点:

  • 给每个注册用户生成专属的授权跳转链接,必须携带以下固定参数,否则无法拿到长期有效的refresh token:
    • client_id:上一步拿到的公共客户端ID
    • redirect_uri:预先配置好的回调接口地址
    • response_type=code:使用授权码模式换取用户凭据
    • scope=https://www.googleapis.com/auth/gmail.send:仅申请发信所需的最小权限范围
    • access_type=offline:强制要求Google返回refresh_token的必填参数
    • prompt=consent:触发用户确认授权,避免静默授权时不返回refresh_token的问题
  • 用户点击链接完成Google账号选择、授权确认后,会携带临时授权码跳回配置的回调接口。此时在回调逻辑中,用临时授权码调用Google的token换取接口,拿到两类返回值:
    • 1小时有效期的短期access_token
    • 长期有效的refresh_token
  • 将拿到的refresh_token与用户的邮箱地址绑定,加密存储到业务数据库中——这是后续自动发信的核心凭据,全程不需要接触用户的邮箱密码。

多用户自动发信实现

  • 当需要从某用户的邮箱发起发信时,先从数据库取出对应用户的refresh_token,通过Google的token刷新接口,换取最新的短期access_token(解决access_token1小时过期的问题)
  • 按照以下配置实例化nodemailer的传输实例,实现用户身份的发信:
    const mailTransporter = nodemailer.createTransport({
      service: "gmail",
      auth: {
        type: "OAuth2",
        user: 当前发信用户的自有Gmail地址,
        clientId: 全局共用的client_id,
        clientSecret: 全局共用的client_secret,
        refreshToken: 数据库存储的对应用户的refresh_token,
        accessToken: 刚刷新获取的短期访问凭证
      }
    })
    
  • 配置发信内容时,将from字段设置为用户的自有邮箱地址,调用sendMail方法即可完成代发。

落地避坑提示

  • 生产模式下,用户授权拿到的refresh token长期有效,除非用户主动在Google账号安全设置中撤销对应用的授权,否则不需要重新触发授权流程。
  • 若开发阶段应用处于测试模式,refresh token会在7天后失效,要么提交审核切换为生产模式,要么在token过期前引导用户重新授权更新凭据。
  • 遇到invalid_grant报错时,优先排查两类场景:用户主动撤销了应用授权、用户修改了Google账号密码导致refresh token失效,此时引导用户重新走一次授权流程,更新数据库中的refresh token即可恢复。
  • 不要为了简化流程申请过高权限(比如直接申请全邮箱读写scope),仅申请发信所需的最小权限,能大幅降低Google应用审核的通过率门槛。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 00:48:04