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 thread. In questo modo puoi recuperare tutti i messaggi di una conversazione, in ordine, rendendo più facile avere il contesto di un messaggio o perfezionare i risultati di ricerca.

Come i messaggi, 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.

Sommario

Recupero dei thread

I thread offrono un modo semplice per recuperare 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 della risorsa Message. Se un messaggio in 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ù 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 thread 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 invii o esegui la migrazione di messaggi che sono una risposta a un'altra email o 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 in bozza. Puoi anche aggiungere un messaggio a un thread durante l'inserimento o l'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 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.

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 associata a un ID thread ai metadati di un messaggio, l'oggetto message.