Gerenciar linhas de execução

Este documento explica como recuperar mensagens de conversas e adicionar mensagens a conversas usando a API Gmail.

A API Gmail usa o recurso threads para agrupar respostas de e-mail com a mensagem original em uma única conversa ou thread. Isso permite recuperar todas as mensagens de uma conversa em ordem, o que facilita ter contexto para uma mensagem ou refinar os resultados da pesquisa.

Assim como o recurso messages, as conversas também podem ter rótulos aplicados. No entanto, ao contrário das mensagens, não é possível criar conversas, apenas excluir. No entanto, as mensagens podem ser inseridas em uma conversa.

Recuperar conversas

As conversas oferecem uma maneira de recuperar mensagens em uma conversa, em ordem. Ao listar um conjunto de linhas de execução, você pode agrupar mensagens por conversa e fornecer contexto adicional. É possível recuperar uma lista de conversas usando o método threads.list ou uma conversa específica com o método threads.get.

O exemplo de código a seguir mostra como usar os métodos threads.get e threads.list em um exemplo que recupera as conversas mais ativas na sua caixa de entrada. O método threads.list busca todos os IDs de linhas de execução. Depois, threads.get extrai todas as mensagens em cada linha de execução. Para mensagens com três ou mais respostas, extraímos a linha Subject e mostramos as não vazias mais o número de mensagens na conversa.

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()

Também é possível filtrar conversas usando os mesmos parâmetros de consulta usados para o recurso messages. Se alguma mensagem em uma conversa corresponder à consulta, a conversa será retornada no resultado.

Adicionar rascunhos e mensagens às conversas

Se você estiver enviando ou migrando mensagens que são uma resposta a outro e-mail ou parte de uma conversa, seu aplicativo deverá adicionar essa mensagem à thread relacionada. Assim, os usuários do Gmail que estão participando da conversa conseguem manter a mensagem no contexto.

Um rascunho pode ser adicionado a uma conversa como parte da criação, atualização ou envio de uma mensagem usando o recurso drafts.

Você também pode adicionar uma mensagem a uma conversa ao inserir ou enviar uma mensagem usando o recurso messages.

Para fazer parte de uma conversa, um rascunho ou uma mensagem precisa atender aos seguintes critérios:

  1. O threadId solicitado precisa ser especificado como parte do recurso drafts.message ou messages fornecido com a solicitação.

  2. Os cabeçalhos References e In-Reply-To precisam ser definidos em conformidade com o padrão RFC 2822.

  3. Os cabeçalhos Subject precisam ser iguais.

Para exemplos de código de como usar o threadId, consulte Criar rascunhos ou Enviar mensagens. Em ambos os casos, é necessário incluir o threadId de destino no recurso messages da solicitação.