管理執行緒

Gmail API 會使用 Thread 資源,將含有原始訊息的電子郵件回覆歸類為單一對話或討論串。如此一來,您就能依序擷取對話中的所有訊息,進而更輕鬆地瞭解訊息的背景資訊或修正搜尋結果。

如同訊息,執行緒也可能套用標籤。但與訊息不同的是,無法建立執行緒,只能刪除。不過,訊息可以插入討論串中。

目錄

擷取執行緒

討論串可讓您輕鬆擷取對話中的訊息。 列出一組執行緒,您可以選擇依對話將訊息分組,並提供額外的背景資訊。您可以使用 threads.list 方法擷取執行緒清單,或是使用 threads.get 擷取特定執行緒。您也可以使用與 Message 資源相同的查詢參數來篩選執行緒。如果執行緒中的任何訊息符合查詢,該執行緒就會在搜尋結果中傳回。

以下程式碼範例示範如何在顯示收件匣內多數聊天執行緒的範例中,使用這兩種方法。threads.list 方法會擷取所有執行緒 ID,然後 threads.get 會擷取每個執行緒中的所有訊息。針對有 3 則以上回覆的,我們會擷取 Subject 行,並顯示非空白的行,以及執行緒中的訊息數量。您也可以在對應的 DevByte 影片中看見此程式碼範例。

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

正在將草稿和訊息新增至討論串

如果您傳送或遷移的訊息是回覆其他電子郵件或對話的一部分,則應用程式應將該訊息新增至相關的執行緒。如此一來,參與對話的 Gmail 使用者就能輕鬆地保留郵件內容。

您可在建立更新傳送草稿訊息的過程中,將草稿新增至執行緒。您也可以在執行緒中新增訊息,做為插入傳送訊息的一部分。

訊息或草稿必須符合下列條件,才能納入執行緒:

  1. 您必須在要求中提供的 MessageDraft.Message 中指定要求的 threadId
  2. ReferencesIn-Reply-To 標頭必須遵循 RFC 2822 標準。
  3. Subject 標頭必須相符。

查看建立草稿傳送郵件範例。在這兩種情況下,您只要在訊息的中繼資料 (message 物件) 中新增與執行緒 ID 配對的 threadId 鍵。