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

使用gmail.send和gmail.readonly OAuth2.0 scope发送Gmail遇认证错误

使用Limilabs Mail.dll OAuth2.0调用Gmail SMTP发送邮件,切换细粒度Scope后出现认证错误

问题描述

使用Limilabs Mail.dll的LoginOAUTH2方法操作Gmail已有2年,此前采用mail.google.com全局Scope获取令牌,一切正常。因谷歌审核要求,改用仅满足收发需求的gmail.send和gmail.readonly Scope,已成功获取令牌,但调用SMTP发送邮件时出现「Username and Password not accepted」认证错误,相同代码搭配原Scope仍可正常运行。

相关代码片段:

// server="smtp.gmail.com", token 为OAuth2返回的令牌
public Smtp NewConnection(string server, string token, string useremail, string serviceProvider)
{
    var smtp = new Smtp();
    smtp.ConnectSSL(server);
    smtp.LoginOAUTH2(useremail, token);
    return smtp;
}

解决方案

1. 验证令牌的Scope与受众(Audience)

使用本地JWT解析工具查看令牌内容:

  • 确认scope字段包含完整URI格式的https://www.googleapis.com/auth/gmail.send(避免使用简写的gmail.send)
  • 确认aud字段值为https://mail.google.com/——Gmail SMTP服务要求令牌的受众必须指向自身,若令牌受众为Gmail API端点,则无法通过SMTP认证。

2. 规范OAuth2授权流程的Scope参数

在获取授权码/令牌的请求中,直接传递完整URI格式的Scope参数:

https://www.googleapis.com/auth/gmail.send https://www.googleapis.com/auth/gmail.readonly

避免依赖客户端自动转换简写Scope,减少歧义。

3. 升级Limilabs Mail.dll到最新版本

旧版本Mail.dll可能对细粒度Gmail Scope的支持不完善,升级后重新测试认证流程。

4. 确认刷新令牌的Scope继承性

若使用刷新令牌获取新访问令牌,需确保初始授权时已包含gmail.send Scope——刷新令牌会继承初始授权的权限范围,若初始授权缺失该Scope,刷新后的令牌也会无对应权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:43:16