Gestire i thread

Questo documento spiega come recuperare i messaggi dei thread e aggiungerne di nuovi utilizzando l'API Gmail.

L'API Gmail utilizza la risorsa threads per raggruppare le risposte alle email con il messaggio originale in un'unica conversazione o thread. In questo modo puoi recuperare tutti i messaggi di una conversazione, in ordine, il che facilita la comprensione del contesto di un messaggio o la definizione dei risultati di ricerca.

Come la risorsa messages, anche i thread possono avere etichette applicate. Tuttavia, a differenza dei messaggi, i thread non possono essere creati, ma solo eliminati. I messaggi possono, tuttavia, essere inseriti in un thread.

Recuperare i thread

I thread consentono di recuperare i messaggi in una conversazione, in ordine. Elencando un insieme di thread, puoi scegliere di raggruppare i messaggi per conversazione e fornire un contesto aggiuntivo. Puoi recuperare un elenco di thread utilizzando il metodo threads.list oppure recuperare un thread specifico con il metodo threads.get.

Il seguente esempio di codice mostra come utilizzare i metodi threads.get e threads.list in un esempio che recupera i thread più attivi nella tua casella di posta. Il metodo threads.list recupera tutti gli ID thread, poi threads.get recupera tutti i messaggi in ogni thread. Per i messaggi con tre o più risposte, estraiamo la riga Subject e visualizziamo quelle non vuote più il numero di messaggi nel thread.

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()

Puoi anche filtrare i thread utilizzando gli stessi parametri di query utilizzati per la risorsa messages. Se un messaggio in un thread corrisponde alla query, il thread viene restituito nel risultato.

Aggiungere bozze e messaggi ai thread

Se invii o esegui la migrazione di messaggi che sono una risposta a un'altra email o fanno parte di una conversazione, la tua applicazione deve aggiungere il messaggio al thread correlato. In questo modo, gli utenti di Gmail che partecipano alla conversazione possono mantenere il messaggio nel contesto.

Una bozza può essere aggiunta a un thread durante la creazione, l'aggiornamento o l'invio di un messaggio utilizzando la risorsa drafts.

Puoi anche aggiungere un messaggio a un thread nell'ambito dell'inserimento o dell'invio di un messaggio utilizzando la risorsa messages.

Per far parte di un thread, una bozza o un messaggio deve soddisfare i seguenti criteri:

  1. Il threadId richiesto deve essere specificato come parte della risorsa drafts.message o messages che fornisci con la richiesta.

  2. Le intestazioni References e In-Reply-To devono essere impostate in conformità allo standard RFC 2822.

  3. Le intestazioni Subject devono corrispondere.

Per esempi di codice su come utilizzare threadId, consulta Creare bozze o Inviare messaggi. In entrambi i casi, devi includere il target threadId all'interno della risorsa messages della richiesta.