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 conversa. Isso permite que você recupere todas as mensagens de uma conversa em ordem, facilitando o contexto de uma mensagem ou o refinamento dos resultados da pesquisa.

Assim como as mensagens, as linhas de execução também podem ter rótulos aplicados a elas. No entanto, ao contrário das mensagens, as linhas de execução não podem ser criadas, apenas excluídas. No entanto, as mensagens podem ser inseridas em uma conversa.

Conteúdo

Como recuperar linhas de execução

As conversas são uma maneira simples de recuperar as mensagens de uma conversa em ordem. Ao listar um conjunto de conversas, você pode optar por agrupar mensagens por conversa e fornecer mais contexto. Você pode extrair uma lista de linhas de execução usando o método threads.list ou extrair uma linha de execução específica com threads.get. Também é possível filtrar linhas de execução usando os mesmos parâmetros do recurso Message. Se alguma mensagem em uma linha de execução corresponder à consulta, ela será retornada no resultado.

O exemplo de código abaixo demonstra como usar os dois métodos em uma amostra que exibe as conversas com mais conversas na sua caixa de entrada. O método threads.list busca todos os IDs de linha de execução, e então threads.get coleta todas as mensagens em cada linha de execução. Para aqueles com três ou mais respostas, extraímos a linha Subject e exibimos as não vazias mais o número de mensagens na linha de execução. Você também encontra esse exemplo de código apresentado 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()

Adicionar rascunhos e mensagens a conversas

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

Um rascunho pode ser adicionado a uma conversa como parte da criação, atualização ou envio de uma mensagem de rascunho. Você também pode adicionar uma mensagem a uma conversa como parte da inserção ou do envio de 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 sua 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.

Veja os exemplos de criação de rascunho ou envio de 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.