Gestione dei thread

L'API Gmail utilizza Thread risorse per raggruppare le risposte alle email con il messaggio originale in un'unica conversazione o thread. Questo ti permette di recuperare tutti i messaggi in una conversazione, in ordine, in modo da trovare più facilmente il contesto per un messaggio o perfezionare i risultati di ricerca.

Come per i messaggi, anche ai thread potrebbero essere applicate etichette. Tuttavia, a differenza dei messaggi, non è possibile creare thread, ma soltanto eliminarli. I messaggi, tuttavia, possono essere inseriti in un thread.

Sommario

Recupero dei thread

I thread offrono un modo semplice per recuperare in ordine i messaggi di una conversazione. Elencando un insieme di thread, puoi scegliere di raggruppare i messaggi per conversazione e fornire ulteriore contesto. 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 di un thread corrisponde alla query, quel thread viene restituito nel risultato.

L'esempio di codice riportato di seguito mostra come utilizzare entrambi i metodi in un esempio che mostra i thread più vivaci nella Posta in arrivo. Il metodo threads.list recupera tutti gli ID thread, quindi threads.get recupera tutti i messaggi in ogni thread. Per quelli con 3 o più risposte, estraiamo la riga Subject e visualizziamo 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()

Aggiunta di bozze e messaggi ai thread

Se stai inviando o migrando messaggi che sono una risposta a un'altra email o parte di una conversazione, l'applicazione deve aggiungere il messaggio al thread correlato. In questo modo, gli utenti di Gmail che partecipano alla conversazione possono mantenere il contesto più facilmente.

È possibile aggiungere una bozza a un thread durante la creazione, l'aggiornamento o l'invio di una bozza di messaggio. Puoi anche aggiungere un messaggio a un thread come parte dell'inserimento o dell'invio di un messaggio.

Per essere parte di un thread, un messaggio o una bozza devono soddisfare i seguenti criteri:

  1. Il valore threadId richiesto deve essere specificato nel Message o Draft.Message che fornisci nella 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 invio di un messaggio. In entrambi i casi, devi semplicemente aggiungere una chiave threadId accoppiata a un ID thread ai metadati di un messaggio, l'oggetto message.