Threads verwalten

In diesem Dokument wird beschrieben, wie Sie mit der Gmail API Nachrichten aus Threads abrufen und Nachrichten zu Threads hinzufügen.

In der Gmail API wird die Ressource threads verwendet, um Antworten auf E-Mails mit der ursprünglichen Nachricht in einer einzigen Konversation oder einem einzigen Thread zu gruppieren. So können Sie alle Nachrichten in einer Unterhaltung in der richtigen Reihenfolge abrufen, was es einfacher macht, den Kontext einer Nachricht zu erfassen oder Suchergebnisse zu verfeinern.

Wie bei der Ressource messages können auch auf Threads Labels angewendet werden. Anders als bei Nachrichten können Threads jedoch nicht erstellt, sondern nur gelöscht werden. Nachrichten können jedoch in einen Thread eingefügt werden.

Threads abrufen

Mithilfe von Threads können Nachrichten in einer Unterhaltung in der richtigen Reihenfolge abgerufen werden. Wenn Sie eine Reihe von Threads auflisten, können Sie Nachrichten nach Unterhaltung gruppieren und zusätzlichen Kontext bereitstellen. Mit der Methode threads.list können Sie eine Liste von Threads abrufen und mit der Methode threads.get einen bestimmten Thread.

Das folgende Codebeispiel zeigt, wie Sie die Methoden threads.get und threads.list in einem Beispiel verwenden, das die Threads mit den meisten Nachrichten in Ihrem Posteingang abruft. Mit der Methode threads.list werden alle Thread-IDs abgerufen. Anschließend werden mit threads.get alle Nachrichten in den einzelnen Threads abgerufen. Bei Nachrichten mit mindestens drei Antworten wird die Zeile Subject extrahiert und die nicht leeren Zeilen sowie die Anzahl der Nachrichten im Thread werden angezeigt.

Python

gmail/snippet/thread/threads.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def show_chatty_threads():
  """Display threads with long conversations(>= 3 messages)
  Return: None

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create gmail api client
    service = build("gmail", "v1", credentials=creds)

    # pylint: disable=maybe-no-member
    # pylint: disable:R1710
    threads = (
        service.users().threads().list(userId="me").execute().get("threads", [])
    )
    for thread in threads:
      tdata = (
          service.users().threads().get(userId="me", id=thread["id"]).execute()
      )
      nmsgs = len(tdata["messages"])

      # skip if <3 msgs in thread
      if nmsgs > 2:
        msg = tdata["messages"][0]["payload"]
        subject = ""
        for header in msg["headers"]:
          if header["name"] == "Subject":
            subject = header["value"]
            break
        if subject:  # skip if no Subject line
          print(f"- {subject}, {nmsgs}")
    return threads

  except HttpError as error:
    print(f"An error occurred: {error}")


if __name__ == "__main__":
  show_chatty_threads()

Sie können Threads auch filtern. Verwenden Sie dazu dieselben Abfrageparameter wie für die Ressource messages. Wenn eine Nachricht in einem Thread der Abfrage entspricht, wird der Thread im Ergebnis zurückgegeben.

Entwürfe und Nachrichten zu Unterhaltungen hinzufügen

Wenn Sie Nachrichten senden oder migrieren, die eine Antwort auf eine andere E‑Mail oder Teil einer Unterhaltung sind, sollte Ihre Anwendung diese Nachricht dem entsprechenden Thread hinzufügen. So können Gmail-Nutzer, die an der Unterhaltung teilnehmen, die Nachricht leichter im Kontext sehen.

Ein Entwurf kann einem Thread beim Erstellen, Aktualisieren oder Senden einer Nachricht über die drafts-Ressource hinzugefügt werden.

Sie können einem Thread auch eine Nachricht hinzufügen, indem Sie eine Nachricht mit der messages-Ressource einfügen oder senden.

Damit ein Entwurf oder eine Nachricht Teil eines Threads sein kann, muss er die folgenden Kriterien erfüllen:

  1. Die angeforderte threadId muss als Teil der drafts.message- oder messages-Ressource angegeben werden, die Sie mit Ihrer Anfrage bereitstellen.

  2. Die Header References und In-Reply-To müssen gemäß dem RFC 2822-Standard festgelegt werden.

  3. Die Subject-Header müssen übereinstimmen.

Codebeispiele für die Verwendung von threadId finden Sie unter Entwürfe erstellen oder Nachrichten senden. In beiden Fällen müssen Sie das Ziel threadId in die messages-Ressource Ihrer Anfrage einfügen.