我正在尝试使用具有域范围委派的服务帐户,以便我可以模拟用户并使用其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]
答案 0 :(得分:0)
域范围的授权仅适用于GSuite域中的用户,并且只能由该域内的管理员进行配置。
假设以上说明描述了您的设置,那么您可能跳过了一步。
我怀疑您忘记了update your client API access from the Admin console。
您必须在管理控制台的该对话框中(在上面的链接中)设置要使用的每个范围。