Gérer les threads

Ce document explique comment récupérer les messages d'un fil de discussion et en ajouter à l'aide de l'API Gmail.

L'API Gmail utilise la ressource threads pour regrouper les réponses aux e-mails avec leur message d'origine dans une même conversation ou un même fil de discussion. Cela vous permet de récupérer tous les messages d'une conversation, dans l'ordre, ce qui facilite la compréhension du contexte d'un message ou l'affinage des résultats de recherche.

Comme pour la ressource messages, des libellés peuvent également être appliqués aux threads. Toutefois, contrairement aux messages, les fils de discussion ne peuvent pas être créés, mais uniquement supprimés. Toutefois, les messages peuvent être insérés dans un fil de discussion.

Récupérer des fils de discussion

Les fils de discussion permettent de récupérer les messages d'une conversation dans l'ordre. En listant un ensemble de threads, vous pouvez choisir de regrouper les messages par conversation et fournir un contexte supplémentaire. Vous pouvez récupérer une liste de threads à l'aide de la méthode threads.list ou récupérer un thread spécifique à l'aide de la méthode threads.get.

L'exemple de code suivant montre comment utiliser les méthodes threads.get et threads.list dans un exemple qui récupère les fils de discussion les plus actifs de votre boîte de réception. La méthode threads.list récupère tous les ID de thread, puis threads.get récupère tous les messages de chaque thread. Pour les messages comportant trois réponses ou plus, nous extrayons la ligne Subject et affichons celles qui ne sont pas vides, ainsi que le nombre de messages dans le fil de discussion.

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

Vous pouvez également filtrer les fils de discussion à l'aide des mêmes paramètres de requête que ceux utilisés pour la ressource messages. Si un message d'un fil de discussion correspond à la requête, le fil de discussion est renvoyé dans le résultat.

Ajouter des brouillons et des messages aux fils de discussion

Si vous envoyez ou migrez des messages qui sont une réponse à un autre e-mail ou qui font partie d'une conversation, votre application doit ajouter ce message au fil de discussion associé. Les utilisateurs Gmail qui participent à la conversation peuvent ainsi plus facilement conserver le contexte du message.

Un brouillon peut être ajouté à un thread lors de la création, de la mise à jour ou de l'envoi d'un message à l'aide de la ressource drafts.

Vous pouvez également ajouter un message à un thread lorsque vous insérez ou envoyez un message à l'aide de la ressource messages.

Pour faire partie d'un fil de discussion, un brouillon ou un message doit répondre aux critères suivants :

  1. Le threadId demandé doit être spécifié dans la ressource drafts.message ou messages que vous fournissez avec votre demande.

  2. Les en-têtes References et In-Reply-To doivent être définis conformément à la norme RFC 2822.

  3. Les en-têtes Subject doivent correspondre.

Pour obtenir des exemples de code montrant comment utiliser threadId, consultez Créer des brouillons ou Envoyer des messages. Dans les deux cas, vous devez inclure le threadId cible dans la ressource messages de votre requête.