API Gmail не может публиковать сообщения на платформе Pub / Sub - PullRequest
3 голосов
/ 21 ноября 2019

Я все настроил в GCP. И мой сервер может получить сообщение, после того как я вручную опубликовал сообщение. enter image description here Но вопрос таков: когда я отправляю электронное письмо на учетную запись электронной почты, в системе Pub-Sub и моем сервере webhook нет никаких уведомлений!

Ниже на графике показано, что мой сервер может получить сообщение после того, как я вручную опубликовал сообщение.

enter image description here

enter image description here

enter image description here

enter image description here

И, как показано на графике выше, когда я вызываю API истории списков, я могу проверить, есть ли информация о тестовой почте, которую я только что отправил.

Кроме того, я успешно вызвал watch API, и этовернулся:

{'historyId': '7688', 'expiration': '1574928158379'}

Вот мой звонок часы:

In [9]:     def set_watch(self, topicName):
   ...:         request = {
   ...:             'labelIds': ['INBOX', 'UNREAD', 'STARRED'],
   ...:             'labelFilterAction': 'include',
   ...:             #'labelIds': ['UNREAD'],
   ...:             'topicName': topicName
   ...:         }
   ...:         res = self.service.users().watch(
   ...:             userId=self.userId, body=request).execute()
   ...:         print(res)

1 Ответ

0 голосов
/ 25 ноября 2019

Тот факт, что вызов set_watch возвращает 200 и HistoryId с допустимым expiration, заставляет меня думать, что часы настроены правильно, и проблема может быть на стороне Pub / Sub.

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

Cloud Pub / Sub требует, чтобы вы предоставили права Gmail для публикации уведомлений в своей теме. .

Для этого вам необходимо предоставить права на публикацию gmail-api-push@system.gserviceaccount.com. Это можно сделать с помощью интерфейса разрешений консоли Cloud Pub / Sub Developer Console, следуя инструкциям по управлению доступом на уровне ресурсов.

, где ссылки указывают здесь и здесь . Следуя принципу минимальных привилегий, я бы рекомендовал предоставить разрешения на уровне ресурса (темы).

Примечание:

настройки на панели будут выглядеть следующим образом: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...