스레드 관리

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 객체에 간단히 추가합니다.