全域委派

时间:2019-03-25 00:24:07

标签: google-apps-script gmail delegation service-accounts

我正在尝试使用具有域范围委派的服务帐户,以便我可以模拟用户并使用其G-Suite帐户(特别是垃圾邮件)进行工作。似乎可以使用服务帐户进行身份验证,但是当我去运行代码时,我告诉我,我的帐户(不是服务帐户)没有域范围的委派,并且会失败。我不知道我要去哪里错了,或者这在App Script上是不可能的。代码和错误消息如下。

function run() {
  var service = getService();
  if (service.hasAccess()) {
    var url = 'https://www.googleapis.com/gmail/v1/users/' + '[impersonation_email]' + '/threads';
    var response = UrlFetchApp.fetch(url, {
      headers: {
        Authorization: 'Bearer ' + service.getAccessToken()
      },
      muteHttpExceptions: true
    });
    Gmail.Users.Threads.trash(userId=[impersonation_email], id=[specific_email_id]);
  } else {
    Logger.log(service.getLastError());
  }
}

function getService() {
  return OAuth2.createService('Gmail:' + '[impersonation_email]')
      .setTokenUrl('https://accounts.google.com/o/oauth2/token')      
      .setPrivateKey([service_account_PRIVATE_KEY_location])
      .setIssuer([service_account_CLIENT_EMAIL])
      .setSubject([impersonation_email ])
      .setPropertyStore(PropertiesService.getScriptProperties())
      .setScope('https://mail.google.com/')
}

错误消息:

API call to gmail.users.threads.trash failed with error: Delegation denied for [my email account]

1 个答案:

答案 0 :(得分:0)

域范围的授权仅适用于GSuite域中的用户,并且只能由该域内的管理员进行配置。

假设以上说明描述了您的设置,那么您可能跳过了一步。

我怀疑您忘记了update your client API access from the Admin console

您必须在管理控制台的该对话框中(在上面的链接中)设置要使用的每个范围。