我正在使用Gmail API,而我正在尝试从公司下的所有用户处获取电子邮件。但是当我运行代码如:
function runAPI(auth) {
var gmail = google.gmail('v1');
gmail.users.threads.list({auth: auth, userId: '108800016305523828361'},'',function(err, response){
if (err) {
console.log("The API returned an error: " + err);
return;
}
var threads = response.threads;
console.log(threads);
})
}
我收到错误:
API返回错误:错误:xxxx@xxxxx.com拒绝委托
在管理控制台中,我这样做了:
作为客户名称,我使用了client_secret.json
文件中的id。对于范围,我给了它所有权限。
如何正确设置Gmail API的域范围委派?
答案 0 :(得分:1)
设置很好,但是在你的代码中,你做错了。
此代码:
gmail.users.threads.list({auth:auth,userId:'108800016305523828361'},'',function(err,response)
特异性。
userId应该是“我”但是才能调用Gmail API,您需要在代码中使用服务帐户“JWT flow”来检索您想要的Gmail用户的oauth2凭据按Preparing to make an authorized API call服务帐户域范围的委派文档中所述进行访问。
具体来说,这会使用您的服务帐户的私钥来请求获取您想要的用户的凭据(在您的域中设置您要在请求中的setServiceAccountUser(user@example.com)
函数中访问的用户的电子邮件< /强>)。然后,您可以在调用Gmail API时使用GoogleCredential
。
答案 1 :(得分:-1)
我认为来自Google的documentation可以帮助您解决此问题,只需按照以下步骤委派域范围的权限。
转到Google Apps域的管理控制台。
从控件列表中选择安全。如果您未看到列出的安全,请从页面底部的灰色栏中选择更多控件,然后从列表中选择安全控制。如果您看不到控件,请确保以域管理员身份登录。
从选项列表中选择显示更多,然后选择高级设置。
在身份验证部分中选择管理API客户端访问。
在客户名称字段中输入服务帐户的客户端ID 。您可以在服务帐户页面中找到服务帐户的客户ID。
在一个或多个API范围字段中,输入应授予您的应用程序访问权限的范围列表。例如,如果您的应用需要对Google Drive API和Google Calendar API进行全域访问,请输入:https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/calendar。
在您的情况下,请使用此scope for Gmail API。
点击授权。
有关error 403 or Delegation denied for <user email>
的详细信息,请查看此相关的SO问题: