Google.Apis.Requests.RequestError 404 - Ошибка при использовании Gmail API для изменения подписи пользователя в домене - PullRequest
0 голосов
/ 04 апреля 2020

Я хочу обновить подпись пользователя домена через Gmail. Net Клиентская библиотека от имени администратора G Suite.

Я следовал этому примеру для настройки и дать разрешения в консоли разработчика Google.

Вот краткое описание того, что я сделал:

  1. Включен API Gmail в консоли API Google
  2. Создана учетная запись службы для моего проекта
  3. Делегированные полномочия по всему домену учетной записи службы
  4. Добавлено https://www.googleapis.com/auth/gmail.settings.sharing, https://www.googleapis.com/auth/gmail.settings.basic области действия

Я могу обновить свою собственную подпись электронной почты, но когда я пытаюсь обновить подпись любого другого пользователя в моем домене, я получаю следующую ошибку:

Google.Apis.Requests.RequestError
Not Found [404]
Errors [
    Message[Not Found] Location[ - ] Reason[notFound] Domain[global]
]

Вот мой код:

GoogleCredential credential;
using (var stream = new FileStream("signature-gmailapi.json", FileMode.Open, FileAccess.Read))
{
    credential = GoogleCredential.FromStream(stream).CreateScoped(new[]
            {GmailService.Scope.GmailSettingsBasic, GmailService.Scope.GmailSettingsSharing})
        .CreateWithUser("admin@domain.com");
}
var service = new GmailService(new BaseClientService.Initializer()
    {
        ApplicationName = "Project",
        HttpClientInitializer = credential
    }
);
service.Users.Settings.SendAs.Patch(new SendAs { Signature = "Test signature..."}, "me",
    "user@domain.com").Execute();

Кто-нибудь может подсказать, что я делаю не так?

1 Ответ

0 голосов
/ 06 апреля 2020

Чтобы изменить подпись пользователя домена с учетной записью службы, необходимо использовать олицетворение

Это достигается с помощью метода CreateWithUser();

Необходимый параметр назначить ему адрес электронной почты ПОЛЬЗОВАТЕЛЯ, а не администратора. Итак:

credential = GoogleCredential.FromStream(stream).CreateScoped(new[]{GmailService.Scope.GmailSettingsBasic, GmailService.Scope.GmailSettingsSharing})
        .CreateWithUser( "user@domain.com");
...