管理话题

本文档介绍了如何使用 Gmail API 检索会话消息以及向会话添加消息。

Gmail API 使用 threads资源将电子邮件回复及其原始消息分组到单个对话或 会话中。这样,您就可以按顺序检索对话中的所有消息,从而更轻松地了解消息的上下文或优化搜索结果。

messages 资源一样,会话也可以应用标签。不过,与消息不同的是,会话无法创建,只能删除。但是,可以将消息插入到会话中。

检索会话

会话提供了一种按顺序检索对话中的消息的方法。通过列出一组会话,您可以选择按对话对消息进行分组,并提供更多上下文。您可以使用 threads.list 方法检索会话列表,也可以使用 threads.get 方法检索特定会话。

以下代码示例展示了如何在示例中使用 threads.getthreads.list 方法来检索收件箱中聊天最频繁的会话。threads.list 方法会提取所有会话 ID,然后 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. 必须在您随请求提供的 drafts.messagemessages 资源中指定所请求的 threadId

  2. 必须按照 RFC 2822 标准设置 ReferencesIn-Reply-To 标头。

  3. Subject 标头必须匹配。

如需查看有关如何使用 threadId 的代码示例,请参阅 创建 草稿发送 消息。在这两种情况下,您都需要在请求的 messages 资源中添加目标 threadId