Gmail API 在阅读来自超级用户帐号的委派电子邮件时"Delegation denied for email"错误



我一直在尝试从我的domail中获取其他用户的电子邮件,以便使用Google nodejs库进行迁移。我的帐户是超级管理员,我的 API 具有以下范围的宽域委派权限:

"https://www.googleapis.com/auth/apps.groups.migration",
"https://mail.google.com/",
"https://www.googleapis.com/auth/gmail.settings.sharing"

我已经登录了 API 并模拟访问

async function initializeGmail(emailToImpersonate) {
const auth = await getAuth(emailToImpersonate);
return google.gmail({
version: 'v1',
auth
});
}
async function getAuth(emailToImpersonate) {
const jwtClient = new google.auth.JWT(
client_email,
null,
private_key,
SCOPES,
emailToImpersonate
);
await jwtClient.authorize();
return jwtClient;
}

我在要迁移的帐户中添加了委派许可,以便可以从我的主帐户访问其电子邮件

const requestBody = {
delegateEmail: user.email,
verificationStatus: 'accepted'
}
await gmail.users.settings.delegates.create({userId, requestBody})

我请求迁移帐户的电子邮件,但收到以下错误

const gmail = await initializeGmail(userEmail);
const messages =  (await gmail.users.messages.list({auth, userId:userEmail})).data.messages;
code: 403,
errors: [
{
domain: 'global',
reason: 'forbidden',
message: 'Delegation denied for sysadmin@boatjump.com'
}
]

任何帮助或想法将不胜感激

第一步

- 创建委托

  • 要创建委托,参数delegateEmail必须指定委托的主要电子邮件,即您的主帐户,我假设sysadmin@boatjump.com
  • 如文档中所述,委托创建必须由模拟委托人的服务帐户执行(我的辅助帐户,我假设user.email
  • (

第二步 - 列出委托人的电子邮件

  • sysadmin@boatjump.co'身份进行身份验证(无需服务帐户(
  • 指定为userIduser.email

获得 403 错误的原因是您指定的事实user.email而不是sysadmin@boatjump.com作为代表和 因此没有传递给sysadmin@boatjump.com上市的权力user.email的电子邮件。

更新:

如果在正确设置受托人后,您在检索委托人的电子邮件时仍然遇到问题,则此问题可能与 Google 问题跟踪器中已报告的此行为有关。

我建议您给它一个"星号",以增加可见性以及将来修复它的机会。

在此期间的解决方法:

使用具有全网域委派的服务帐号时,请以委托人的身份进行身份验证并代表他检索电子邮件 (userId:"me"(。

相关内容

最新更新