从超级管理员帐户读取委派电子邮件时出现错误,Gmail API"电子邮件的委派被拒绝

人气:825 发布:2022-10-16 标签: node.js google-admin-sdk gmail-api

问题描述

我一直在尝试从我的域中的另一个用户那里获取电子邮件,以便使用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'(不需要服务帐户) 指定为userIduser.email 您获得403错误的原因是您指定的 user.email而不是sysadmin@boatjump.com作为委托 因此没有传递给sysadmin@boatjump.com列出的权限 user.email的电子邮件。

更新:

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

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

临时解决办法:

在使用服务帐号进行全域委派时,请以委托者的身份进行身份验证并代表其检索电子邮件(用户ID:"me")。

152