我正在尝试使用具有域范围委派的服务帐户,这样我就可以模拟用户并在他们的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]
发布于 2019-03-26 06:03:55
全域委派仅适用于GSuite域中的用户,并且只能由该域中的管理员进行配置。
假设上面的语句描述了您的设置,那么您可能跳过了一个步骤。
我怀疑你忘了update your client API access from the Admin console。
您必须在管理控制台的该对话框(在上面的链接中)中设置要使用的每个作用域。
https://stackoverflow.com/questions/55329895
复制相似问题