Управление потоками

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

Как и сообщения , цепочки сообщений могут иметь метки. Однако, в отличие от сообщений, цепочки сообщений нельзя создавать, их можно только удалять. Однако сообщения можно добавлять в цепочки сообщений.

Содержание

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

Потоки предоставляют простой способ извлечения сообщений из цепочки по порядку. Перечисляя набор потоков, вы можете сгруппировать сообщения по цепочке и предоставить дополнительный контекст. Вы можете получить список потоков с помощью метода threads.list или получить конкретный поток с помощью threads.get . Вы также можете фильтровать потоки, используя те же параметры запроса, что и для ресурса Message . Если какое-либо сообщение в потоке соответствует запросу, этот поток возвращается в результатах.

Приведённый ниже пример кода демонстрирует использование обоих методов в примере, отображающем самые активные ветки в вашем почтовом ящике. Метод threads.list извлекает идентификаторы всех веток, а затем threads.get — все сообщения в каждой ветке. Для сообщений с тремя и более ответами мы извлекаем строку Subject и отображаем непустые ветки, а также количество сообщений в ветке. Вы также найдёте этот пример кода в соответствующем видео DevByte.

Питон

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. Заголовки References и In-Reply-To должны быть установлены в соответствии со стандартом RFC 2822 .
  3. Заголовки Subject должны совпадать.

Взгляните на примеры создания черновика и отправки сообщения . В обоих случаях вы просто добавляете ключ threadId в паре с идентификатором потока к метаданным сообщения — объекту message .