Como gerenciar linhas de execução

A API Gmail usa recursos Thread 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, facilitando a compreensão do contexto de uma mensagem ou o refinamento dos resultados da pesquisa.

Assim como as mensagens, as conversas também podem ter marcadores aplicados a elas. No entanto, ao contrário das mensagens, as conversas não podem ser criadas, apenas excluídas. No entanto, é possível inserir mensagens em uma conversa.

Índice

Como recuperar conversas

Os tópicos oferecem uma maneira simples de recuperar mensagens em uma conversa em ordem. Ao listar um conjunto de encadeamentos, você pode agrupar as mensagens por conversa e fornecer mais contexto. É possível recuperar uma lista de conversas usando o método threads.list ou uma conversa específica com threads.get. Também é possível filtrar conversas usando os mesmos parâmetros de consulta do recurso Message. Se alguma mensagem em uma conversa corresponder à consulta, essa conversa será retornada no resultado.

O exemplo de código abaixo demonstra como usar os dois métodos em uma amostra que mostra as conversas mais ativas na sua caixa de entrada. O método threads.list busca todos os IDs de conversa, e o threads.get pega todas as mensagens em cada conversa. Para quem tem três ou mais respostas, extraímos a linha Subject e mostramos as não vazias mais o número de mensagens na conversa. Você também encontra esse exemplo de código no vídeo DevByte correspondente.

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

Como 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 ao criar, atualizar ou enviar uma mensagem de rascunho. Você também pode adicionar uma mensagem a uma conversa ao inserir ou enviar uma mensagem.

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

  1. O threadId solicitado precisa ser especificado no Message ou Draft.Message 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.

Confira os exemplos de como criar um rascunho ou enviar uma mensagem. Em ambos os casos, basta adicionar uma chave threadId pareada com um ID de linha de execução aos metadados de uma mensagem, o objeto message.