Управлять потоками

В этом документе объясняется, как получать сообщения из цепочек сообщений и добавлять сообщения в цепочки сообщений с помощью API Gmail.

API Gmail использует ресурс threads для группировки ответов на электронные письма вместе с исходным сообщением в единую беседу или цепочку. Это позволяет получать все сообщения в беседе в порядке их поступления, что упрощает понимание контекста сообщения или уточнение результатов поиска.

Подобно ресурсу messages , к веткам обсуждений также можно применять метки. Однако, в отличие от сообщений, ветки обсуждений нельзя создать, только удалить. Сообщения, тем не менее, можно вставлять в ветку.

Извлечь потоки

Ветки обсуждений позволяют получать сообщения в беседе в упорядоченном порядке. Выведя список веток, вы можете сгруппировать сообщения по беседе и предоставить дополнительный контекст. Вы можете получить список веток, используя метод ` threads.list , или получить конкретную ветку, используя метод ` threads.get .

Приведённый ниже пример кода демонстрирует использование методов threads.get и threads.list для получения наиболее активных веток обсуждений в вашем почтовом ящике. Метод threads.list получает все идентификаторы веток, а метод threads.get извлекает все сообщения в каждой ветке. Для сообщений с тремя и более ответами мы извлекаем строку 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. Запрашиваемый threadId должен быть указан в составе ресурса drafts.message или messages , который вы предоставляете вместе с запросом.

  2. Заголовки References и In-Reply-To должны быть установлены в соответствии со стандартом RFC 2822 .

  3. Заголовки Subject должны совпадать.

Примеры кода, демонстрирующие использование threadId , см. в разделах «Создание черновиков» или «Отправка сообщений» . В обоих случаях необходимо указать целевой threadId в ресурсе messages вашего запроса.