我一直在尝试从我的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 [email protected]'
}
]
任何帮助或想法将非常感激
delegateEmail
必须指定代表的主要邮箱,也就是您的主账户,我猜测是 [email protected]
user.email
)[email protected]'
(不需要服务账户)userId
user.email
你获得403错误的原因是你指定了
user.email
而不是[email protected]
作为代表,因此没有传给。[email protected]
列名权user.email
的电子邮件。
更新。
如果在正确设置代表后,您仍然在检索代表的邮件时遇到问题,这个问题很可能与 这个 行为已经在Google的问题追踪器上报告了。
我建议你给它一颗 "星",以增加它的可见度和未来修复的机会。
在此期间的变通方法。
当使用全域授权的服务账户时,以授权者的身份进行认证,并代表他(userId: "me")检索邮件。