【问题标题】:Get inboxinfo from shared/delegated mailbox in Gsuite从 Gsuite 中的共享/委托邮箱获取收件箱信息
【发布时间】:2020-10-25 20:16:53
【问题描述】:

我们在工作中使用 Gsuite Enterprise/Piazzaweb。我正在使用基本脚本从我自己的邮箱中获取信息,那里没有问题。但我想从我被委派的几个共享邮箱中提取信息。例如 billing@mycompany.com。但我找不到任何有关此的信息,甚至无法使用 App 脚本访问委托邮箱。 我一直在使用应用脚本从委派邮箱发送电子邮件,没有任何问题。

希望有人能告诉我更多关于此的信息。

提前致谢。

【问题讨论】:

标签: google-apps-script gmail google-workspace


【解决方案1】:

要在 Apps 脚本中使用服务帐户,您必须执行以下操作:

1。构建 OAuth 服务:

一旦您将added 指定库添加到您的脚本中,您必须这样做才能使用委托凭证构建 OAuth 服务:

const PRIVATE_KEY  = '-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n'; 
const CLIENT_EMAIL = 'xxxxxxxxxxxxxxxxxxxxx.iam.gserviceaccount.com'; // Service account email
const USER_EMAIL = 'email_address_to_impersonate'; // Account to impersonate
const SCOPE = 'https://www.googleapis.com/auth/gmail.readonly' // Change according to your preferences

function getGmailService() {
  return OAuth2.createService('Gmail: ' + USER_EMAIL)
      .setTokenUrl('https://oauth2.googleapis.com/token')
      .setPrivateKey(PRIVATE_KEY)
      .setIssuer(CLIENT_EMAIL)
      .setSubject(USER_EMAIL)
      .setPropertyStore(PropertiesService.getScriptProperties())
      .setScope(SCOPE);
}

其中PRIVATE_KEY 是指在服务帐户 JSON 凭据中找到的密钥,CLIENT_EMAIL 是服务帐户电子邮件,USER_EMAIL 是指您要访问其INBOX 的电子邮件地址。

请务必注意,SCOPE 应该是您在授权时指定的范围之一。

2。访问 API:

构建 OAuth 服务后,您可以使用它来检索访问令牌,您可以使用该令牌访问所需的资源。当然,GmailApp serviceAdvanced Gmail Service 在这里不会用到,因为您必须使用刚刚构建的服务访问 API。因此,访问API的方式将是通过UrlFetch发出相应的HTTP请求。

我不确定你到底想做什么,具体的请求取决于此,但例如,如果你想从模拟用户那里list the messages,你可以这样做:

function readInbox() {
  var service = getGmailService();
  console.log(service.getAccessToken());
  if (service.hasAccess()) {
    var url = 'https://www.googleapis.com/gmail/v1/users/me/messages';
    var response = UrlFetchApp.fetch(url, {
      headers: {
        Authorization: 'Bearer ' + service.getAccessToken()
      }
    });
    var result = JSON.parse(response.getContentText());
    console.log(JSON.stringify(result, null, 2));
  }
}

注意:

  • 我在这里假设您已经拥有 created a Service Accountgranted domain-wide authority,并且您的问题只是在 Apps 脚本中使用它。
  • Gmail API Reference 中,检查HTTP requestParametersRequest body 部分对应于您要使用的API 方法,如果您需要有关如何发出HTTP 请求的信息(访问的URL、HTTP 方法, 请求参数等)。

参考:

【讨论】:

    【解决方案2】:

    您不能使用来自应用脚本的委托,因为应用脚本不支持使用服务帐户。您需要创建一个 oauth2 流程并让该用户对其进行授权。 @Zig Mandel 提供的答案

    除了@ZigMandel 所说的:据我所知,除非这是 google 域或 google for work 帐户,否则您不能将服务帐户与 gmail 一起使用。您需要使用 Oauth2。 @DalmTo 提供的答案

    【讨论】:

      【解决方案3】:

      我不知道这是否能解决问题,但已向 Google Cloud CommunityGoogle Issue Tracker 提出功能请求,以允许从委派邮箱访问 Gmail 应用脚本插件。 点赞越多,Google 认真对待这个问题的机会就越大;)。

      【讨论】:

        猜你喜欢
        • 2014-07-13
        • 2015-11-11
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多