Como gerenciar linhas de execução

A API Gmail usa recursos Thread para agrupar as respostas a um e-mail com a mensagem original em uma única conversa ou linha de conversa. Isso permite que você recupere todas as mensagens de uma conversa em ordem, facilitando o contexto de uma mensagem ou aperfeiçoando os resultados da pesquisa.

Assim como as mensagens, as linhas de transmissã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 na ordem certa. Ao listar um conjunto de linhas de execução, você pode agrupar mensagens por conversa e fornecer mais contexto. É possível recuperar uma lista de linhas de execução usando o método threads.list ou recuperar uma linha de execução específica com threads.get. Também é possível filtrar linhas usando os mesmos parâmetros de consulta do recurso Message. Se qualquer mensagem em uma linha de execução corresponder à consulta, essa linha de execução será retornada no resultado.

O exemplo de código abaixo demonstra como usar os dois métodos em um exemplo que mostra as conversas mais longas na sua caixa de entrada. O método threads.list busca todos os IDs de linha de execução e, em seguida, threads.get extrai todas as mensagens em cada linha de execução. Para conversas com três ou mais respostas, extraímos a linha Subject e mostramos as que não estão vazias, além do número de mensagens na conversa. Você também vai encontrar este exemplo de código no vídeo do 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 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ção relacionada. Isso facilita para os usuários do Gmail que estão participando da conversa 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. Também é possível adicionar uma mensagem a uma conversa como parte de 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 que você fornece 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 como 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.