问题描述
我一直在尝试从我的域中的另一个用户那里获取电子邮件,以便使用Google NodeJS库进行迁移。我的帐号是Superadmin,我的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
如documentation中指定的,委派创建必须由模拟委托者的服务帐户执行(我假设user.email
是您的辅助帐户)
第二步-列出委托者的电子邮件
身份验证为sysadmin@boatjump.co'
(不需要服务帐户)
指定为userId
user.email
您获得403错误的原因是您指定的
user.email
而不是sysadmin@boatjump.com
作为委托
因此没有传递给sysadmin@boatjump.com
列出的权限
user.email
的电子邮件。
更新:
如果在正确设置代理人后,您在检索代理人的电子邮件时仍然遇到问题,则此问题可能与Google问题跟踪器上已报告的this行为有关。
我建议您给它一个"星",以增加可见性和将来修复它的机会。
临时解决办法:
在使用服务帐号进行全域委派时,请以委托者的身份进行身份验证并代表其检索电子邮件(用户ID:"me")。