调用Google Gmail API发送邮件时遇403权限不足错误求助
解决Gmail API 403权限不足问题的步骤
1. 清理旧凭证缓存
- 对于依赖
token.json的代码:务必删除已生成的token.json文件,重新运行代码并完成授权流程。因为修改权限范围后,旧token会保留之前的权限配置,不会自动更新,这是导致权限不足的最常见原因。 - 对于使用
google.auth.default()的代码:检查环境变量GOOGLE_APPLICATION_CREDENTIALS指向的凭证文件,或系统默认位置的缓存凭证,确保这些凭证的权限范围包含https://mail.google.com/或https://www.googleapis.com/auth/gmail.send。如果用的是服务账号,需确认账号已被授予对应权限。
2. 确认代码权限范围配置
确保两段代码的SCOPES变量包含足够权限:发送邮件最低需要https://www.googleapis.com/auth/gmail.send,https://mail.google.com/为全权限范围,可覆盖所有Gmail操作。注意检查scope URL是否拼写正确。
3. 核对Google API控制台配置
- 确认OAuth同意屏幕已添加对应权限范围,若为未发布的外部应用,需将测试账号加入测试用户列表,否则会触发权限限制。
- 验证使用的客户端凭证(如
credentials2.json)属于正确的API项目,未混用其他项目的凭证文件。
针对两段代码的具体调整
标签列表代码
若运行仍报错,删除token.json后重新执行,代码会自动启动新的授权流程,生成包含正确权限的新token。
邮件发送代码
该代码使用google.auth.default()自动获取凭证,若出现权限问题,可改用OAuth2授权流程的凭证加载方式,替换原凭证获取逻辑:
# 替换原 creds, _ = google.auth.default(scopes=SCOPES) 代码 from google.oauth2.credentials import Credentials creds = Credentials.from_authorized_user_file('token.json', SCOPES)
这样能确保使用的是经过你授权、包含正确权限的用户凭证。
验证当前凭证权限
重新授权后,可添加代码打印当前凭证的权限范围,确认是否包含所需scope:
print(creds.scopes)
内容的提问来源于stack exchange,提问作者Akshay Rao
相关产品推荐
相关产品推荐

