Scripts Gmail: Automatize sua caixa de entrada com o Google Apps Script

Mais uma vez, retorno para discutir a otimização da produtividade e a automação dentro do Gmail. Desta vez, vamos nos aprofundar no lado técnico, empregando o Google Apps Script para aprimorar sua experiência com o Gmail.

O Gmail oferece diversas configurações nativas que podem ser ajustadas para automatizar tarefas e impulsionar a produtividade. No entanto, existem limitações e várias funcionalidades carecem de opções de personalização mais abrangentes. É nesse ponto que você pode assumir o controle, utilizando o Google Apps Script para personalizar suas necessidades.

Com essa ferramenta, você pode desenvolver scripts customizados que executam ações que o Gmail não consegue realizar de forma nativa. Além disso, você pode configurar acionadores baseados em tempo para automatizar a execução desses scripts.

Para dar início, preparei uma lista de scripts úteis que, sem dúvida, elevarão sua experiência com o Gmail. Cada script foi projetado para resolver automaticamente desafios comuns, como a eliminação de duplicatas ou a criação automática de pastas. Por isso, alguns scripts podem ser um pouco mais extensos do que o necessário.

Criando um Script no Google Apps Script

Antes de implementar e personalizar esses scripts, é essencial saber como criar e executar um script no Google Apps Script. Siga os passos abaixo:

Abra o Google Apps Script e clique no botão “Novo projeto” localizado no painel esquerdo.

Nessa etapa, remova todo o código preexistente e copie/cole o script que será fornecido. Em seguida, clique no botão “Salvar” para registrar o script.

Para executar o script, clique no botão “Executar” ao lado de “Salvar”. Será solicitado que você conceda permissões e receberá um aviso de que o script não foi verificado. Ignore o aviso e conceda as permissões, pois o script é para uso pessoal e não foi revisado pelo Google.

Feito isso, o script será executado, e você poderá verificar no registro de execução se foi bem-sucedido ou não.

Configurando um Acionador

Diversos scripts funcionam melhor quando são acionados automaticamente. O Google Apps Script também oferece uma seção para criar acionadores baseados em tempo para cada script, garantindo sua execução automática.

No entanto, antes de abordar a criação de um acionador, é importante saber que o Google Apps Script possui cotas limitadas, que variam conforme seu plano do Google Workspace. Caso execute muitos scripts simultaneamente e com muita frequência, você poderá atingir a cota diária, interrompendo o serviço temporariamente.

Embora haja a opção de executar scripts a cada minuto, isso consumiria rapidamente sua cota diária. Certifique-se de definir um intervalo que execute a tarefa de forma confiável.

Para criar um acionador, clique em “Acionadores” no painel esquerdo com o script aberto e, em seguida, clique no botão “Adicionar acionador”.

Aqui você pode escolher um intervalo de tempo em minutos ou meses, além de sua frequência. Também é possível selecionar uma data e hora específicas para executar o script uma única vez. Após selecionar todas as opções, clique em “Salvar” para criar o acionador.

Se você não concedeu permissão para executar o script, como mencionei anteriormente, será solicitado que você faça isso antes de criar o acionador.

Com base em suas configurações, o acionador será executado continuamente. Caso ocorra algum problema, você será notificado juntamente com a mensagem de erro correspondente.

Agora, vamos explorar exemplos práticos de como usar o Google Apps Script para automatizar suas tarefas no Gmail.

Enviar E-mails Recorrentes

function sendRecurringEmail() {
  var recipient = "[email protected]";
  var subject = "Seu assunto aqui";
  var message = "Sua mensagem personalizada aqui";

  GmailApp.sendEmail(recipient, subject, message);
}

O Gmail permite agendar e-mails, mas não e-mails recorrentes. Se você precisa lembrar alguém de algo ou garantir que um e-mail não seja esquecido, este script simples envia uma mensagem para o endereço especificado com o assunto e a mensagem definidos por você. Em seguida, configure um acionador recorrente na seção “Acionadores”.

No script, ajuste os campos “destinatário”, “assunto” e “mensagem” com os detalhes relevantes. Certifique-se de que as aspas em volta do texto de exemplo sejam mantidas. Por exemplo, o assunto deve ser:

var subject = "Lembrete Importante";

Como os acionadores têm um limite máximo de um mês, as mensagens recorrentes devem ser enviadas mensalmente. Infelizmente, isso impede o uso para enviar mensagens em ocasiões anuais.

Filtrar E-mails com Links para um Marcador

function processUnreadEmailsWithLinks() {
  var labelName="Emails com Links";
  var label = GmailApp.getUserLabelByName(labelName);
  if (!label) {
    label = GmailApp.createLabel(labelName);
  }
  var threads = GmailApp.search('is:unread');
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var body = message.getBody();
      if (bodyContainsLinks(body)) {
        label.addToThread(threads[i]);
      }
    }
  }
}

function bodyContainsLinks(body) {
  var regex = /https?:\/\/[^\s<>"']+/g;
  return regex.test(body);
}

E-mails que contêm links no corpo costumam ter maior importância. Seja para receber relatórios de colegas ou newsletters com recursos específicos, categorizar e-mails com links pode ser muito útil.

Este script analisa todos os e-mails não lidos na sua conta do Gmail e direciona aqueles com links para um novo marcador chamado “E-mails com Links”. Por padrão, o script busca em todo o Gmail, mas você pode restringir a pesquisa editando a linha var threads = GmailApp.search(‘is:unread’); Veja algumas opções:

Buscar apenas na Caixa de Entrada: var threads = GmailApp.search(‘in:inbox is:unread’);

Buscar em outros marcadores: var threads = GmailApp.search(‘in:inbox is:unread OR in:promotions is:unread OR in:important is:unread’);

Buscar todos os e-mails lidos/não lidos na Caixa de Entrada: var threads = GmailApp.search(‘in:inbox’);

Buscar e-mails de um remetente específico: var threads = GmailApp.search(‘from:[email protected]‘);

Esses exemplos dão uma ideia de como personalizar o script para refinar a busca de e-mails com links. Acredito que configurar um acionador diário seja suficiente para esse tipo de organização.

Excluir Automaticamente E-mails Antigos

function deleteOldEmails() {
  var threads = GmailApp.search('older_than:30d');
  for (var i = 0; i < threads.length; i++) {
    threads[i].moveToTrash();
  }
}

Se você não precisa manter e-mails antigos, utilize este script para excluí-los após um período específico. O script procura e-mails no Gmail com mais de 30 dias e os move para a lixeira. Altere a parte ‘older_than:30d’ para definir o tempo desejado, como ‘older_than:180d’.

Para excluir e-mails de um marcador específico, adapte a linha Gmail.App.search para incluir o marcador. Exemplo:

var threads = GmailApp.search(‘in:caixa de entrada older_than:30d’);

Automatize o processo criando um acionador que execute o script automaticamente a cada poucos dias. Dependendo da quantidade de e-mails antigos a serem excluídos, um acionador semanal ou mensal pode ser suficiente.

Salvar Todos os Endereços de E-mail no Planilhas Google

function getEmailAddresses() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = "Email Addresses";
  var sheet = ss.getSheetByName(sheetName);
  
  if (!sheet) {
    sheet = ss.insertSheet(sheetName);
    sheet.appendRow(["Email Address"]);
  }
  
  var threads = GmailApp.getInboxThreads();
  var emailAddresses = [];
  
  var existingData = sheet.getDataRange().getValues();
  if (existingData.length > 1) {
    var existingEmailAddresses = existingData.slice(1).flat();
  } else {
    var existingEmailAddresses = [];
  }
  
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var emailAddress = messages[j].getFrom();
      if (emailAddresses.indexOf(emailAddress) === -1 && existingEmailAddresses.indexOf(emailAddress) === -1) {
        emailAddresses.push(emailAddress);
      }
    }
  }
  
  for (var k = 0; k < emailAddresses.length; k++) {
    sheet.appendRow([emailAddresses[k]]);
  }
}

Este script pesquisa todos os e-mails no Gmail, extrai o nome e o endereço de e-mail dos remetentes/destinatários e salva as informações no Planilhas Google. Essa funcionalidade pode ser usada para criar listas de e-mail para marketing ou manter um registro de todas as suas interações.

A criação deste script é diferente dos anteriores, pois você deve abrir o Google Apps Script dentro do Planilhas Google para que ele possa identificar a planilha. Isso só é necessário na primeira vez. Veja como:

Abra uma nova planilha no Planilhas Google. Clique em “Extensões” no menu superior e selecione “Apps Script”. Isso abrirá o Google Apps Script, e você poderá adicionar o script e executá-lo como demonstrado anteriormente.

O script criará uma nova planilha com o nome “Endereços de E-mail” com o nome e endereço de e-mail de cada remetente na mesma célula. Você não precisará abrir a planilha novamente para cada execução do acionador. Novos endereços de e-mail serão adicionados ao final, sem duplicações.

Dependendo da frequência com que você recebe e-mails de novos remetentes, um acionador diário ou semanal deve ser suficiente.

Salvar Anexos de E-mail no Google Drive Automaticamente

function onNewEmail(e) {
  var threads = GmailApp.getInboxThreads(0, 1);
  var messages = threads[0].getMessages();
  
  var folderName = "Email Attachments";
  var folderIterator = DriveApp.getFoldersByName(folderName);
  var folder;

  if (folderIterator.hasNext()) {
    folder = folderIterator.next();
  } else {
    folder = DriveApp.createFolder(folderName);
  }
  
  for (var i = 0; i < messages.length; i++) {
    var message = messages[i];
    
    if (message.getAttachments().length > 0) {
      var attachments = message.getAttachments();
      
      for (var j = 0; j < attachments.length; j++) {
        var attachment = attachments[j];
        var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes()));
        var existingFiles = folder.getFiles();

        var isDuplicate = false;

        while (existingFiles.hasNext()) {
          var existingFile = existingFiles.next();
          var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes()));

          if (attachmentHash === existingFileHash) {
            isDuplicate = true;
            break;
          }
        }

        if (!isDuplicate) {
          folder.createFile(attachment);
        }
      }
    }
  }
}

Este script é muito útil para quem recebe anexos importantes por e-mail com frequência. Ele não apenas preserva os anexos, mas também os agrupa em uma interface organizada para melhor gerenciamento.

Este script é programado para funcionar somente com novos e-mails que você receberá após a primeira execução. Ele cria automaticamente uma pasta chamada “Anexos de E-mail” no Google Drive, caso ela não exista. Para evitar duplicações de arquivos com nomes idênticos, o script verifica um valor de hash MD5 único baseado no conteúdo do arquivo.

Nem todos desejam salvar apenas anexos de novos e-mails, e pode haver necessidade de salvar anexos de e-mails já recebidos. Para isso, abaixo está um script modificado que segue as mesmas regras, mas salva os anexos de e-mails já existentes. No entanto, levará algum tempo para salvar todos os arquivos, dependendo da quantidade de anexos que você possui.

function saveAllAttachmentsToDrive() {
  var folderName = "Email Attachments";
  var folderIterator = DriveApp.getFoldersByName(folderName);
  var folder;
  
  if (folderIterator.hasNext()) {
    folder = folderIterator.next();
  } else {
    folder = DriveApp.createFolder(folderName);
  }

  var threads = GmailApp.getInboxThreads();

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var attachments = message.getAttachments();
      
      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes()));
        var existingFiles = folder.getFiles();
        var isDuplicate = false;

        while (existingFiles.hasNext()) {
          var existingFile = existingFiles.next();
          var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes()));

          if (attachmentHash === existingFileHash) {
            isDuplicate = true;
            break;
          }
        }

        if (!isDuplicate) {
          folder.createFile(attachment);
        }
      }
    }
  }
}

Obtenha Citações Inspiradoras Diárias

function sendDailyQuoteEmail() {
  var apiKey = 'YOUR_API_KEY';
  var endpoint="https://quotes.rest/qod";

  var response = UrlFetchApp.fetch(endpoint, {
    headers: {
      'X-TheySaidSo-Api-Secret': apiKey
    }
  });

  var data = JSON.parse(response.getContentText());
  var quoteContents = data.contents.quotes[0];
  var quote = quoteContents.quote;
  var author = quoteContents.author;

  var recipient="[email protected]";
  var subject="Citação Diária";
  var message = `Aqui está a sua citação diária:\n\n"${quote}"\n\n- ${author}`;

  GmailApp.sendEmail(recipient, subject, message);
}

Embora não seja diretamente útil para o seu trabalho ou gerenciamento de e-mails, este script é ótimo para se motivar diariamente na sua caixa de entrada. Ao configurá-lo corretamente, o script utilizará a API They Said So para enviar diariamente citações inspiradoras para você via e-mail. Veja como configurá-lo:

Primeiro, você precisa de uma chave de API pessoal da They Said So. Na página da API They Said So, você pode criar uma conta gratuita para obter a chave. A versão gratuita oferece 5 chamadas, o suficiente para um uso diário.

Após obter sua chave, substitua a parte “YOUR_API_KEY” pela sua chave real. Altere também a parte [email protected] com seu endereço de e-mail ou de outra pessoa se quiser enviá-las para outra pessoa.

Agora, configure um acionador para ser executado diariamente. Executá-lo com mais frequência apenas reenviará a citação do dia atual.

Considerações Finais

Personalmente, não tive problemas para executar todos esses scripts em conjunto sem atingir a cota diária. Tenho certeza de que você também terá bons resultados, desde que não use acionadores muito agressivos. Verifique periodicamente os scripts para garantir que não ocorram erros.