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

Google AppScript调用Gmail API查询域内用户自动回复提示授权被拒怎么办

问题原因

Delegation denied报错本质是权限不足问题:默认情况下Google Workspace普通用户仅拥有自身Gmail配置的访问权限,只能通过'me'参数查询自己的自动回复设置,没有权限访问同域其他用户的Gmail隐私配置,跨用户查询会被Google的权限拦截机制直接拒绝。

解决步骤

需要由Google Workspace域管理员完成全域权限委托配置后才可实现同域其他用户的Gmail配置查询,操作流程如下:

  • 确认你拥有Google Workspace域管理员权限,或可以协调域管理员完成相关配置
  • 找到当前AppScript脚本关联的GCP项目:在AppScript编辑器的「项目设置」页点击「Google Cloud 平台项目」链接即可进入对应项目
  • 在GCP项目中启用Gmail API:进入「API和服务」-「启用API和服务」,搜索Gmail API并完成启用
  • 配置服务账号与全域授权:
    1. 在GCP项目「API和服务」-「凭据」页面创建服务账号,生成并下载JSON格式的密钥文件,记录服务账号邮箱、私钥、客户端ID信息
    2. 进入Google Workspace管理后台,依次打开「安全」-「访问和数据控制」-「API控制」-「全域委派」
    3. 点击添加新的委托,填入上述服务账号的客户端ID,在OAuth权限范围栏填入https://www.googleapis.com/auth/gmail.settings.basic后保存
  • 修改AppScript代码,使用服务账号模拟目标用户身份调用Gmail API,参考代码如下:
// 引入OAuth2库(需先在AppScript库中添加脚本ID:1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF)
function getOAuthToken(targetUserEmail) {
  const service = OAuth2.createService('gmail_delegation')
    .setTokenUrl('https://oauth2.googleapis.com/token')
    .setPrivateKey('替换为你服务账号的私钥')
    .setIssuer('替换为你服务账号的邮箱地址')
    .setSubject(targetUserEmail)
    .setScope('https://www.googleapis.com/auth/gmail.settings.basic')
  return service.getAccessToken()
}

function checkOtherUserVacation(targetUserEmail) {
  const accessToken = getOAuthToken(targetUserEmail)
  const apiUrl = `https://gmail.googleapis.com/gmail/v1/users/${targetUserEmail}/settings/vacation`
  const requestParams = {
    headers: {
      Authorization: `Bearer ${accessToken}`
    },
    method: 'get',
    muteHttpExceptions: true
  }
  const response = UrlFetchApp.fetch(apiUrl, requestParams)
  Logger.log(JSON.parse(response.getContentText()))
}
  • 注意:该方案仅支持查询同Google Workspace域内用户的配置,无法查询域外普通Gmail账号的信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:54:02