从超级管理员账户读取委托邮件时,Gmail API出现 "委托拒绝邮件 "的错误。

问题描述 投票:0回答:1

我一直在尝试从我的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]'
    }
]

任何帮助或想法将非常感激

node.js gmail-api google-admin-sdk
1个回答
0
投票

第一步 - 创建一个委托人

  • 要创建一个委托,参数 delegateEmail 必须指定代表的主要邮箱,也就是您的主账户,我猜测是 [email protected]
  • 根据《公约》的规定 文件如果您的委托人是您的第二账户,那么委托人的创建必须由一个冒充委托人的服务账户来完成。user.email)

第2步--列出代表的邮箱地址

你获得403错误的原因是你指定了 user.email 而不是 [email protected] 作为代表,因此没有传给。[email protected] 列名权 user.email的电子邮件。

更新。

如果在正确设置代表后,您仍然在检索代表的邮件时遇到问题,这个问题很可能与 这个 行为已经在Google的问题追踪器上报告了。

我建议你给它一颗 "星",以增加它的可见度和未来修复的机会。

在此期间的变通方法。

当使用全域授权的服务账户时,以授权者的身份进行认证,并代表他(userId: "me")检索邮件。

© www.soinside.com 2019 - 2024. All rights reserved.