Gestione dei thread

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

Come per i messaggi, anche ai thread possono essere applicate delle etichette. Tuttavia, a differenza dei messaggi, i thread non possono essere creati, ma solo eliminati. I messaggi possono però essere inseriti in un thread.

Sommario

Recupero dei thread

I thread consentono di recuperare in modo semplice i messaggi di 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 o recuperare un thread specifico con threads.get. Puoi anche filtrare i thread utilizzando gli stessi parametri di query utilizzati per la risorsa Message. Se un messaggio di un thread corrisponde alla query, il thread viene restituito nel risultato.

L'esempio di codice riportato di seguito mostra come utilizzare entrambi i metodi in un esempio che visualizza i thread più utilizzati nella posta in arrivo. Il metodo threads.list recupera tutti gli ID thread, quindi threads.get recupera tutti i messaggi di ogni thread. Per quelli con 3 o più risposte, estraiamo la riga Subject e mostriamo quelle non vuote più il numero di messaggi nel thread. Troverai questo esempio di codice anche nel video DevByte corrispondente.

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

Aggiungere bozze e messaggi ai thread

Se stai inviando o eseguendo la migrazione di messaggi che sono una risposta a un'altra email o fanno parte di una conversazione, la tua applicazione deve aggiungerli al thread correlato. In questo modo, sarà più facile per gli utenti di Gmail che partecipano alla conversazione mantenere il messaggio nel contesto.

Una bozza può essere aggiunta a un thread nell'ambito della creazione, dell'aggiornamento o dell'invio di un messaggio. Puoi anche aggiungere un messaggio a un thread nell'ambito dell'inserimento o dell'invio di un messaggio.

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

  1. Il threadId richiesto deve essere specificato nel Message o Draft.Message fornito con la richiesta.
  2. Le intestazioni References e In-Reply-To devono essere impostate in conformità con lo standard RFC 2822.
  3. Le intestazioni Subject devono corrispondere.

Dai un'occhiata agli esempi di creazione di una bozza o di invio di un messaggio. In entrambi i casi, devi semplicemente aggiungere una chiave threadId accoppiata a un ID thread ai metadati di un messaggio, ovvero all'oggetto message.