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

如何通过命令行使用XOAuth2认证Gmail SMTP并解决认证错误?

如何通过命令行使用XOAuth2认证Gmail SMTP发送邮件?

问题描述

已在OAuth同意屏幕中配置桌面客户端,用于测试Gmail API发信功能,但通过命令行使用XOAuth2认证Gmail SMTP时,出现如下错误:

AUTH LOGIN XOAUTH2
334 UGFzc3dvcmQ6
<base64 encoded string>
535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8  https://support.google.com/mail/?p=BadCredentials u12-20020a170902b28c00b0019c2b1c4db1sm2373754plr.239 - gsmtp

解决方案

1. 修正认证命令格式

Gmail SMTP的XOAuth2认证不需要AUTH LOGIN前缀,正确命令是直接发送AUTH XOAUTH2,后跟Base64编码的认证字符串——错误的命令格式是触发BadCredentials的核心原因之一。

2. 生成合规的XOAuth2认证字符串

认证字符串需遵循固定格式,再做Base64编码:

user=<你的Gmail邮箱地址>\x01auth=Bearer <有效的访问令牌>\x01\x01
  • 替换<你的Gmail邮箱地址>为实际邮箱(如example@gmail.com)
  • 替换<有效的访问令牌>为拥有https://mail.google.com/权限的OAuth2访问令牌
  • 使用base64等命令行工具编码上述字符串,得到可用于SMTP认证的编码值

3. 获取符合权限要求的访问令牌

确保你的桌面客户端已申请https://mail.google.com/的API权限范围,并通过OAuth2授权流程获取访问令牌:

  • 需引导用户完成登录授权,用授权码兑换访问令牌
  • 访问令牌有有效期,过期后需用刷新令牌重新获取

4. 完整命令行SMTP交互示例

# 连接Gmail SMTP服务器
openssl s_client -connect smtp.gmail.com:587 -starttls smtp

# 服务器响应后发送EHLO命令
EHLO yourdomain.com

# 发起XOAuth2认证
AUTH XOAUTH2 <Base64编码的认证字符串>

# 认证成功后发送邮件
MAIL FROM:<sender@gmail.com>
RCPT TO:<recipient@gmail.com>
DATA
Subject: Test Email via XOAUTH2
From: Sender <sender@gmail.com>
To: Recipient <recipient@gmail.com>

This is a test email sent via Gmail SMTP with XOAUTH2 authentication.
.
QUIT

5. 常见问题排查

  • 确认访问令牌未过期,且权限范围包含https://mail.google.com/
  • 检查Base64编码无额外换行或空格
  • 确保OAuth同意屏幕已添加测试用户(测试阶段无需全量发布)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:53:23