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

使用Google API发送邮件出现unauthorized_client错误如何解决?

问题原因与解决方案

这个报错的核心原因是你使用的服务账号未正确配置Google Workspace全域权限委派,或配置的权限范围不匹配。

发件人邮箱关联逻辑

你当前用的是服务账号模拟域内用户发信的模式,关联逻辑很明确:

  • 代码中credentials.with_subject(USER_EMAIL)已经指定了服务账号要冒充的域内用户身份,Gmail接口会以这个用户的身份执行发信操作
  • 代码里的gmail_from必须和USER_EMAIL完全一致,接口会校验二者匹配性,不一致会直接触发报错

全域委派配置操作步骤

官方说的「使用数字ID重新添加客户端」是服务账号调用Workspace API的必填配置,作用是给服务账号开通冒充域内用户调用接口的权限,具体操作如下:

  • 首先确认你使用的是Google Workspace企业/教育版账号,个人普通Gmail账号不支持服务账号模拟发信,必须换普通OAuth2授权模式
  • 第一步:进入Google Cloud控制台,找到你创建的服务账号,复制它的数字客户端ID(注意不是服务账号的邮箱地址,是一串纯数字ID)
  • 第二步:使用Google Workspace管理员账号登录管理后台,依次进入「安全性」→「访问权限和数据控制」→「API控制」→「全域委派」页面
  • 第三步:如果之前已经添加过该服务账号的相关条目,先删除原有旧条目
  • 第四步:点击「新增」按钮,在客户端ID输入框粘贴刚才复制的数字ID,在OAuth范围输入框填写https://www.googleapis.com/auth/gmail.send,确认保存
  • 第五步:等待10~15分钟让配置生效,Google全域权限配置有延迟,刚配置完立即测试会依然报错

额外修正点

你当前代码里有一个低级错误会导致scope校验失败:SCOPES里的权限地址前面多了一个空格,改成如下内容即可:

SCOPES = ['https://www.googleapis.com/auth/gmail.send']

凭证使用说明

你当前的代码用的是服务账号凭证,不需要用到你创建的OAuth 2.0 Client IDs凭证,只要保证你从Google Cloud控制台下载的服务账号密钥文件命名为keys.json,和代码放在同一目录下即可。如果是个人Gmail用户,需要删掉服务账号相关的授权逻辑,改用OAuth 2.0 Client IDs走浏览器授权的流调用接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:18:01