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

如何获取永不失效的Google OAuth2刷新令牌?(用于Nodemailer发邮件)

关于Nodemailer + Google OAuth2 长期刷新令牌的解决方案

先明确你疑惑的「用户」是谁

这里的「用户」绝对不是访问你应用的前端访客,而是你用来发送邮件的那个Google账号(比如你的业务邮箱账号)。因为你要的是后端固定用一个账号发邮件,不需要让用户授权,整个流程都是围绕你自己的发件账号来做的。

能不能后端配置长期有效的刷新令牌?当然可以

Google确实提供长期有效的刷新令牌,但必须满足几个前提条件,不然拿到的就是短期测试令牌。

如何获取长期有效的刷新令牌?

按以下步骤操作,全程在Google Cloud Console完成,不用依赖OAuthPlayground:

  1. 配置OAuth同意屏幕并发布

    • 登录Google Cloud Console,创建/选择你的项目。
    • 进入「API和服务」→「OAuth同意屏幕」,选择「外部」类型(个人Gmail账号只能选这个,Workspace账号可选内部)。
    • 填写必要的应用信息,然后在「范围」里添加https://mail.google.com/(这个是发邮件的全权限,比窄权限更稳定,避免令牌提前失效)。
    • 完成后点击「发布应用」,必须发布成生产模式——测试模式下的刷新令牌只会有效期7天。
  2. 创建桌面类型的OAuth客户端ID

    • 进入「API和服务」→「凭据」,点击「创建凭据」→「OAuth客户端ID」。
    • 应用类型选择「桌面应用」(后端用的话,桌面应用的授权流程不需要前端回调,适合获取离线刷新令牌),填写名称后创建,得到client_id和client_secret。
  3. 手动获取授权码并兑换刷新令牌

    • 构造授权URL,替换成你的client_id:
      https://accounts.google.com/o/oauth2/v2/auth?client_id=你的客户端ID&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://mail.google.com/&access_type=offline&prompt=consent
      
    • 把这个URL复制到浏览器,用你要发邮件的Google账号登录,授权后会得到一个授权码(一串字符串)。
    • 发送POST请求到https://oauth2.googleapis.com/token,参数如下(用表单或JSON都可以):
      {
        "client_id": "你的客户端ID",
        "client_secret": "你的客户端密钥",
        "code": "刚才拿到的授权码",
        "redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
        "grant_type": "authorization_code"
      }
      
    • 返回结果里的refresh_token就是长期有效的,把它存在后端的配置文件或密钥管理服务里。

注意事项

  • 只要你的Google账号不修改密码、不撤销这个应用的权限、Google没有检测到异常操作,这个刷新令牌就会一直有效。
  • 不要用OAuthPlayground的令牌,它属于第三方授权通道,令牌有效期短,仅适合快速测试。
  • 如果后续令牌失效(比如权限被撤销),只需要重新走一遍授权码兑换流程,获取新的刷新令牌即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:05:19