Übersicht
Die Gmail API bietet Server-Push-Benachrichtigungen, über die Sie auf Änderungen an Ihren Gmail-Postfächern achten können. Mit dieser Funktion können Sie die Leistung Ihrer Anwendung verbessern. So lassen sich die zusätzlichen Netzwerk- und Rechenkosten vermeiden, die durch das Abfragen von Ressourcen entstehen, um festzustellen, ob sie sich geändert haben. Jedes Mal, wenn sich ein Postfach ändert, benachrichtigt die Gmail API Ihre Backend-Serveranwendung.
Erste Cloud Pub/Sub-Einrichtung
Die Gmail API verwendet die Cloud Pub/Sub API, um Push-Benachrichtigungen zu senden. So sind Benachrichtigungen über verschiedene Methoden möglich, einschließlich Webhooks und Abfragen an einem einzigen Aboendpunkt.
Vorbereitung
Damit Sie die restliche Einrichtung abschließen können, müssen Sie die Voraussetzungen für Cloud Pub/Sub erfüllen und dann einen Cloud Pub/Sub-Client einrichten.
Thema erstellen
Erstellen Sie mit Ihrem Cloud Pub/Sub-Client das Thema, an das die Gmail API Benachrichtigungen senden soll. Der Themenname kann beliebig sein. Er muss mit projects/myproject/topics/*
übereinstimmen, wobei myproject
die Projekt-ID ist, die für Ihr Projekt in der Google Developers Console aufgeführt ist.
Abo erstellen
Folgen Sie dem Cloud Pub/Sub-Abonnentenleitfaden, um ein Abo für das von Ihnen erstellte Thema einzurichten. Konfigurieren Sie den Abotyp entweder als Webhook-Push (d.h. HTTP-POST-Callback) oder als Pull (d.h. von Ihrer App initiiert). So erhält Ihre Anwendung Benachrichtigungen zu Updates.
Veröffentlichungsrechte für das Thema gewähren
Für Cloud Pub/Sub müssen Sie Gmail-Berechtigungen erteilen, um Benachrichtigungen in Ihrem Thema zu veröffentlichen.
Dazu müssen Sie gmail-api-push@system.gserviceaccount.com
publish
-Berechtigungen gewähren. Sie können dies über die Berechtigungsoberfläche der Cloud Pub/Sub-Entwicklerkonsole tun. Folgen Sie dazu der Anleitung zur Zugriffssteuerung auf Ressourcenebene.
Updates für den Gmail-Posteingang erhalten
Nachdem die Ersteinrichtung von Cloud Pub/Sub abgeschlossen ist, konfigurieren Sie Gmail-Konten so, dass Benachrichtigungen bei Postfachaktualisierungen gesendet werden.
Wiedergabeanfrage
Wenn Sie Gmail-Konten so konfigurieren möchten, dass Benachrichtigungen an Ihr Cloud Pub/Sub-Thema gesendet werden, rufen Sie einfach mit Ihrem Gmail API-Client watch
auf das Gmail-Nutzerpostfach auf, ähnlich wie bei jedem anderen Gmail API-Aufruf.
Geben Sie dazu den oben erstellten Themennamen und alle anderen Optionen in Ihrer watch
-Anfrage an, z. B. labels
, nach dem gefiltert werden soll. So werden Sie beispielsweise immer benachrichtigt, wenn eine Änderung am Posteingang vorgenommen wird:
Protokoll
POST "https://www.googleapis.com/gmail/v1/users/me/watch"
Content-type: application/json
{
topicName: "projects/myproject/topics/mytopic",
labelIds: ["INBOX"],
labelFilterBehavior: "INCLUDE",
}
Python
request = {
'labelIds': ['INBOX'],
'topicName': 'projects/myproject/topics/mytopic',
'labelFilterBehavior': 'INCLUDE'
}
gmail.users().watch(userId='me', body=request).execute()
Antwort auf Smartwatch
Wenn die watch
-Anfrage erfolgreich ist, erhalten Sie eine Antwort wie diese:
{
historyId: 1234567890
expiration: 1431990098200
}
mit dem aktuellen Postfach historyId
des Nutzers. Alle Änderungen nach dem historyId
werden an Ihren Kunden gesendet. Wenn Sie Änderungen vor diesem Datum historyId
verarbeiten müssen, lesen Sie den Synchronisierungsleitfaden.
Außerdem sollte bei einem erfolgreichen watch
-Aufruf sofort eine Benachrichtigung an Ihr Cloud Pub/Sub-Thema gesendet werden.
Wenn Sie beim watch
-Aufruf einen Fehler erhalten, sollten die Details die Ursache des Problems erläutern. In der Regel liegt das Problem bei der Einrichtung des Cloud Pub/Sub-Themas und des Abos. In der Cloud Pub/Sub-Dokumentation finden Sie Informationen dazu, ob die Einrichtung korrekt ist, und Hilfe bei der Fehlerbehebung bei Problemen mit Themen und Abos.
Postfachbenachrichtigung verlängern
Du musst watch
mindestens alle 7 Tage noch einmal aufrufen, da du sonst keine Updates mehr für den Nutzer erhältst. Wir empfehlen, watch
einmal täglich anzurufen. Die watch
-Antwort enthält außerdem ein Ablaufdatum mit dem Zeitstempel für das Ablaufdatum des watch
.
Benachrichtigungen erhalten
Wenn ein Posteingang aktualisiert wird, der mit Ihrer watch
übereinstimmt, wird Ihre Anwendung über die Änderung benachrichtigt.
Wenn Sie ein Push-Abo konfiguriert haben, entspricht eine Webhook-Benachrichtigung an Ihren Server einem PubsubMessage
:
POST https://yourserver.example.com/yourUrl
Content-type: application/json
{
message:
{
// This is the actual notification data, as base64url-encoded JSON.
data: "eyJlbWFpbEFkZHJlc3MiOiAidXNlckBleGFtcGxlLmNvbSIsICJoaXN0b3J5SWQiOiAiMTIzNDU2Nzg5MCJ9",
// This is a Cloud Pub/Sub message id, unrelated to Gmail messages.
"messageId": "2070443601311540",
// This is the publish time of the message.
"publishTime": "2021-02-26T19:13:55.749Z",
}
subscription: "projects/myproject/subscriptions/mysubscription"
}
Der HTTP-POST-Text ist JSON und die tatsächliche Gmail-Benachrichtigungsnutzlast befindet sich im Feld message.data
. Das Feld message.data
ist ein base64url-codierter String, der in ein JSON-Objekt decodiert wird, das die E-Mail-Adresse und die neue Mailbox-Verlaufs-ID für den Nutzer enthält:
{"emailAddress": "user@example.com", "historyId": "9876543210"}
Mit history.list
können Sie dann die Änderungsdetails für den Nutzer ab seiner letzten bekannten Verlaufs-ID abrufen, wie im Synchronisierungsleitfaden beschrieben.
Wenn Sie stattdessen ein Pull-Abo konfiguriert haben, finden Sie in den Codebeispielen im Leitfaden zum Pull-Abonnieren von Cloud Pub/Sub weitere Informationen zum Empfangen von Nachrichten.
Auf Benachrichtigungen reagieren
Alle Benachrichtigungen müssen bestätigt werden. Wenn Sie die Push-Übermittlung mit Webhooks verwenden, wird die Benachrichtigung durch eine erfolgreiche Antwort (z.B. HTTP 200) bestätigt.
Wenn du die Pull-Zustellung verwendest (REST Pull, RPC Pull oder RPC StreamingPull), musst du einen Bestätigungsaufruf (REST oder RPC) senden. Weitere Informationen zum Bestätigen von Nachrichten entweder asynchron oder synchron mithilfe der offiziellen RPC-basierten Clientbibliotheken finden Sie in den Codebeispielen im Leitfaden zum Abrufen von Cloud Pub/Sub-Nachrichten.
Wenn die Benachrichtigungen nicht bestätigt werden (z.B. wenn Ihr Webhook-Callback einen Fehler zurückgibt oder die Zeitüberschreitung erreicht), versucht Cloud Pub/Sub, die Benachrichtigung zu einem späteren Zeitpunkt noch einmal zu senden.
Postfachupdates beenden
Wenn Sie keine Updates mehr für eine Mailbox erhalten möchten, wählen Sie stop
. Alle neuen Benachrichtigungen sollten dann innerhalb weniger Minuten eingestellt werden.
Beschränkungen
Maximale Benachrichtigungsrate
Für jeden beobachteten Gmail-Nutzer gilt eine maximale Benachrichtigungsrate von 1 Ereignis pro Sekunde. Alle Nutzerbenachrichtigungen, die diese Rate überschreiten, werden gelöscht. Achten Sie beim Umgang mit Benachrichtigungen darauf, dass Sie keine weitere Benachrichtigung auslösen und dadurch eine Benachrichtigungsschleife starten.
Zuverlässigkeit
Normalerweise sollten alle Benachrichtigungen innerhalb weniger Sekunden zuverlässig zugestellt werden. In einigen extremen Situationen können Benachrichtigungen jedoch verzögert oder verworfen werden.
Achten Sie darauf, dass diese Möglichkeit ordnungsgemäß verarbeitet wird, damit die Anwendung auch dann synchronisiert wird, wenn keine Push-Nachrichten empfangen werden. Beispiel: Nach einem Zeitraum ohne Benachrichtigungen für einen Nutzer kann auf das regelmäßige Aufrufen von history.list
zurückgegriffen werden.
Einschränkungen von Cloud Pub/Sub
Die Cloud Pub/Sub API hat auch eigene Einschränkungen, die in der Dokumentation zu Preisen und Kontingenten beschrieben sind.