Как отправить электронное письмо, используя идентификатор группы GSUITE через API GMail? - PullRequest
0 голосов
/ 11 февраля 2020

В настоящее время я работаю над запросом, в котором мне нужно отправить электронное письмо с идентификатором группы GSuite, используя GMail API. Я могу отправить электронное письмо, используя мой личный кабинет. Я хочу избежать псевдонима и использовать тот же групповой идентификатор электронной почты для отправки электронных писем через мой код.

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

GoogleCredential credential1 = GoogleCredential.fromStream(new FileInputStream(CREDENTIALS_FILE_PATH));

GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(credential1.getServiceAccountId())
.setServiceAccountPrivateKey(credential1.getServiceAccountPrivateKey())
.setServiceAccountScopes(SCOPES)
.setServiceAccountUser("gsuitegroupemail@DOMAIN.COM")
.build();

Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY,credential).setApplicationName(APPLICATION_NAME).build();

MimeMessage mimeMessage = CreateMessage.createEmail("sourav.lion@DOMAIN.com",
"gsuitegroupemail@DOMAIN.COM", "TestGmailApi", "TestEmail");

App.sendMessage (service, "gsuitegroupemail@DOMAIN.COM", mimeMessage);

Всякий раз, когда я пытаюсь выполнить это, я сталкиваюсь с ошибкой 401 неавторизованным. Вот трассировка стека для того же.

Exception in thread "main" com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:394)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.globalpayments.gmailapi.GMailApi.App.sendMessage(App.java:83)
at com.globalpayments.gmailapi.GMailApi.App.main(App.java:51)

Спасибо, Сурав

1 Ответ

0 голосов
/ 12 февраля 2020

Проблема с ошибкой 401 Unauthorized связана с несколькими источниками. Вот краткое изложение наиболее распространенных причин.

Первый шаг:

Прежде чем продолжить, дважды проверьте, что у вас есть Gmail API [1] включено в консоли разработчика [2] для проекта, который вы используете - возможно, что либо он был включен для другого проекта, либо даже случайно отключен при обходе настроек.

После того, как на консоли разработчика выберите свой проект в раскрывающемся списке в левом верхнем углу страницы рядом с Google APIs, прежде чем проверять, включен ли API.

Отладка 401 Unauthorized :

Указанная c ошибка TokenResponseException: 401 Unauthorized также может исходить от маркера с истекшим сроком доступа. Хотя это не должно поддерживаться для учетных записей служб так же, как и для доступа учетных записей пользователей к API, оно генерируется на лету и зависит от используемого вами файла учетных данных.

Важные вещи, которые следует помнить для учетных данных, - это то, что адрес электронной почты вашей учетной записи и области действия должны быть хорошо и полностью определены; то есть используемые вами области предоставляют вашему приложению доступ к службам, к которым оно пытается получить доступ . В случае метода Gmail Users.messages: send [3] вам понадобится одна из следующих областей:

Примечание: также важно убедиться, что у вас есть области, доступные для других методов приложения, которые вы будете использовать sh. Для получения этой информации ознакомьтесь со спецификацией метода c страниц.

Также проверьте страницу управления API Google, в которой подробно описано, как пройти аутентификацию с помощью служебной учетной записи, в Java [4] для получения дополнительной информации.

Учетные записи служб и делегирование по всему домену:

В соответствии с документацией Google важно предоставить служебную учетную запись, которую вы используете для доступа к вашим данным пользователя. передача полномочий по всему домену [5] . Шаги приведены в ссылке # 5, но приведено следующее:

Чтобы включить делегирование G Suite для всего домена, выполните следующие действия:

  1. Найдите вновь созданная служебная учетная запись в таблице. В разделе Действия нажмите , затем Редактировать .
  2. В сведениях учетной записи службы нажмите ˅ Показать делегирование для всего домена , а затем убедитесь, что установлен флажок Включить G Suite для всего домена .
  3. Если вы еще не настроили экран согласия OAuth в своем приложении, необходимо сделать это до того, как вы сможете включить домен Всесоюзная делегация. Следуйте инструкциям на экране для настройки экрана согласия OAuth, затем повторите описанные выше шаги и повторно установите флажок.
  4. Нажмите Сохранить , чтобы обновить учетную запись службы и вернуться к таблице. служебных аккаунтов. Можно увидеть новый столбец Делегирование всего домена . Нажмите Просмотр идентификатора клиента , чтобы получить и записать идентификатор клиента.

Получение дополнительной информации из 401:

Также возможно получить более подробную информацию о специфике вашего 401, извлекая данные из HTTP-ответа:

try {
    App.sendMessage (service, "gsuitegroupemail@DOMAIN.COM", mimeMessage);
} catch (GoogleJsonResponseException e) {
    // log your errors and error messages
}

Надеюсь, это полезно для вас!

Ссылки :

  1. API Gmail v4
  2. Консоль разработчика Google
  3. API Gmail - Users.messages: send Метод
  4. Аутентификация с использованием учетной записи службы
  5. Выполнение делегирования полномочий G Suite для всего домена
...