Gérer les threads

L'API Gmail utilise des ressources Thread pour regrouper les réponses aux e-mails avec leur message d'origine dans une seule conversation ou un seul fil de discussion. Vous pouvez ainsi récupérer tous les messages d'une conversation, dans l'ordre, ce qui vous permet d'obtenir plus facilement le contexte d'un message ou d'affiner les résultats de recherche.

Comme pour les messages, des libellés peuvent également être appliqués aux fils de discussion. Toutefois, contrairement aux messages, les fils de discussion ne peuvent pas être créés, mais seulement supprimés. Vous pouvez toutefois insérer des messages dans un fil de discussion.

Sommaire

Récupérer des threads

Les fils de discussion permettent de récupérer facilement les messages d'une conversation dans l'ordre. En listant un ensemble de fils de discussion, vous pouvez choisir de regrouper les messages par conversation et de fournir un contexte supplémentaire. Vous pouvez récupérer une liste de threads à l'aide de la méthode threads.list ou un thread spécifique avec threads.get. Vous pouvez également filtrer les threads à l'aide des mêmes paramètres de requête que pour la ressource Message. Si un message d'un fil de discussion correspond à la requête, ce fil de discussion est renvoyé dans le résultat.

L'exemple de code ci-dessous montre comment utiliser les deux méthodes dans un exemple qui affiche les fils de discussion les plus bavards 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 fils de discussion comportant au moins trois réponses, nous extrayons la ligne Subject et affichons les lignes non vides, ainsi que le nombre de messages du fil de discussion. Vous trouverez également cet exemple de code dans la vidéo DevByte correspondante.

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

Ajouter des brouillons et des messages aux fils de discussion

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

Vous pouvez ajouter un brouillon à un fil de discussion lors de la création, de la modification ou de l'envoi d'un message brouillon. Vous pouvez également ajouter un message à un fil de discussion lorsque vous insérez ou envoyez un message.

Pour faire partie d'un fil de discussion, un message ou un brouillon doit remplir les critères suivants:

  1. Le threadId demandé doit être spécifié sur le Message ou le Draft.Message que vous fournissez avec votre requête.
  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.

Consultez les exemples de création d'un brouillon ou d'envoi d'un message. Dans les deux cas, vous devez simplement ajouter une clé threadId associée à un ID de thread aux métadonnées d'un message, l'objet message.