Вызов API Gmail возвращается без ошибок, но не применяется изменение для создания делегата - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь вызвать Gmail API в App Script при олицетворении учетной записи пользователя, используя Библиотеку Google Oauth2 для App Script , чтобы установить делегата для своего почтового ящика. Используя примеры Google в качестве основы, я создал следующую функцию для вызова службы и предоставления необходимой информации для создания нового делегата в папке входящих сообщений:

function setGmailDelegate() {
  var formObject = {
    delegateReaderEmail: "homer.simpson@fox.com",
    delegateTargetEmail: "robert.terwilliger@fox.com"
  };

  var userEmail = formObject.delegateReaderEmail;
  var boxEmail = formObject.delegateTargetEmail;
  Logger.log("Letting "+userEmail + " read " + boxEmail);

  var service = getGmailAddDelegateService_(boxEmail);
  if (service.hasAccess()) {
    var url = 'https://www.googleapis.com/gmail/v1/users/' + boxEmail +'/settings/delegates';
    var response = UrlFetchApp.fetch(url, {
      headers: {
        Authorization: 'Bearer ' + service.getAccessToken()
      },
      body: {
        "delegateEmail": userEmail,
        "verificationStatus": "accepted"
      }
    });
    var result = JSON.parse(response.getContentText());
    Logger.log(result);
  } else {
    Logger.log(service.getLastError());
  }
}

Эта функция возвращает ничего - сообщения об ошибке нет, но делегат не создан. В соответствии с API я должен получить ресурс делегатов обратно, но это не так. Что я делаю не так?

Это функция, определяющая создание службы OAuth:

function getGmailAddDelegateService_(boxEmail) { 
  return OAuth2.createService('Gmail:' + boxEmail)
      // Set the endpoint URL.
      .setTokenUrl('https://oauth2.googleapis.com/token')

      // Set the private key and issuer.
      .setPrivateKey(PRIVATE_KEY)
      .setIssuer(CLIENT_EMAIL)

      // Set the name of the user to impersonate.
      .setSubject(boxEmail)

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getScriptProperties())

      // Set the scope. This must match one of the scopes configured during the
      // setup of domain-wide delegation.
      .setScope(['https://mail.google.com/','https://www.googleapis.com/auth/gmail.settings.sharing']);
}

Я пытался изменить области видимости, но безрезультатно. Я не вижу ничего в журналах выполнения журналов аудита G Suite, которые бы указывали на какие-либо проблемы.

1 Ответ

2 голосов
/ 17 апреля 2020

Найден ответ: URLApp требует, чтобы вы указали, что вы отправляете данные:

var response = UrlFetchApp.fetch(url, {
      method: 'post',
      headers: {
        Authorization: 'Bearer ' + service.getAccessToken()
      },
      body: {
        "delegateEmail": userEmail,
        "verificationStatus": "accepted"
      }
...