スレッドを管理する

このドキュメントでは、Gmail API を使用してスレッド メッセージを取得し、スレッドにメッセージを追加する方法について説明します。

Gmail API は、 threads リソースを使用して、メールの返信とその元のメッセージを 1 つの会話または スレッドにグループ化します。これにより、会話内のすべてのメッセージを順番に取得できるため、メッセージのコンテキストを把握したり、検索結果を絞り込んだりすることが容易になります。

messages リソースと同様に、スレッドにもラベルを適用できます。ただし、メッセージとは異なり、スレッドは作成できず、削除のみ可能です。ただし、メッセージをスレッドに挿入することはできます。

スレッドを取得する

スレッドを使用すると、会話内のメッセージを順番に取得できます。一連のスレッドを一覧表示することで、メッセージを会話ごとにグループ化し、追加のコンテキストを提供できます。 threads.list メソッドを使用してスレッドのリストを取得することも、 threads.get メソッドを使用して特定のスレッドを取得することもできます。

次のコードサンプルは、受信トレイで最もチャットの多いスレッドを取得するサンプルで threads.get メソッドと threads.list メソッドを使用する方法を示しています。threads.list メソッドはすべてのスレッド ID を取得し、threads.get は各スレッド内のすべてのメッセージを取得します。3 件以上の返信があるメッセージの場合は、Subject 行を抽出し、空でないものとスレッド内のメッセージ数を表示します。

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

スレッドをフィルタリングするには、 リソースで使用されるものと同じクエリ パラメータを使用します。messagesスレッド内のいずれかのメッセージがクエリと一致すると、そのスレッドが結果として返されます。

下書きとメッセージをスレッドに追加する

別のメールへの返信であるメッセージや会話の一部であるメッセージを送信または移行する場合、アプリケーションはそのメッセージを関連するスレッドに追加する必要があります。これにより、会話に参加している Gmail ユーザーは、メッセージのコンテキストを把握しやすくなります。

下書きは、スレッドに 作成更新、または 送信する際に、 drafts リソースを使用して追加できます。

メッセージを 挿入または 送信する際に、 messages リソースを使用してメッセージをスレッドに追加することもできます。

スレッドの一部にするには、下書きまたはメッセージが次の条件を満たしている必要があります。

  1. リクエストで指定する drafts.message リソースまたは messages リソースの一部として、リクエストされた threadId を指定する必要があります。

  2. References ヘッダーと In-Reply-To ヘッダーは、 RFC 2822 標準に準拠して設定する必要があります。

  3. Subject ヘッダーが一致している必要があります。

threadId の使用方法のコードサンプルについては、下書き を作成するまたはメッセージ を送信するをご覧ください。どちらの場合も、リクエストの messages リソース内にターゲット threadId を含める必要があります。