스레드 관리

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. 요청된 threadId는 요청과 함께 제공하는 Message 또는 Draft.Message에 지정해야 합니다.
  2. ReferencesIn-Reply-To 헤더는 RFC 2822 표준을 준수하여 설정해야 합니다.
  3. Subject 헤더가 일치해야 합니다.

초안 만들기 또는 메일 보내기 예시를 참고하세요. 두 경우 모두 스레드 ID와 페어링된 threadId 키를 메시지의 메타데이터인 message 객체에 추가하면 됩니다.