Pular para o conteúdo
Automação

Como usar Google Apps Script para enviar e-mails automáticos a partir de uma planilha

Se você já mantém uma lista de pedidos, contatos ou tarefas em uma planilha, não precisa copiar cada linha para o Gmail. Com Google Apps Script, dá para ler as linhas marcadas como “PENDENTE”, enviar a mensagem e registrar o resultado automaticamente.

Fluxo visual: uma planilha aciona o Apps Script, que envia um e-mail automático
O fluxo básico: a planilha funciona como fila e o Apps Script faz o envio.

Neste tutorial, a automação será executada por um gatilho instalável — uma regra que chama o código em determinado horário. O exemplo serve para confirmações, avisos internos, lembretes e respostas simples, mas não substitui um sistema de atendimento quando há grande volume ou necessidade de histórico completo.

O que você vai montar

A planilha terá uma linha por mensagem. O script vai procurar as linhas com status PENDENTE, usar as colunas de destinatário, assunto e mensagem, enviar o e-mail com o serviço MailApp e trocar o status para ENVIADO. Se o endereço estiver inválido, a linha ficará como ERRO.

O Apps Script é uma plataforma de automação baseada em JavaScript integrada aos serviços do Google. Em uma planilha, ele consegue ler e escrever células, criar menus e reagir a eventos como edição, envio de formulário ou horário programado. A documentação oficial descreve as células como dados organizados em matrizes, o que explica o uso de linhas e colunas no código.

Se a sua necessidade ainda é organizar os dados antes de automatizar, veja também como criar uma planilha de controle de caixa no Google Sheets. A estrutura é parecida: primeiro os dados precisam estar consistentes; depois a automação faz o trabalho repetitivo.

Prepare a planilha

Crie uma aba chamada Solicitações e use esta primeira linha como cabeçalho:

Data Cliente E-mail Assunto Mensagem Status Enviado em Observação
18/08/2026 Ana ana@exemplo.com Confirmação Seu pedido foi recebido. PENDENTE

O nome dos cabeçalhos não é usado pelo código, mas a ordem das colunas é. Para testar, coloque o seu próprio endereço de e-mail em uma linha, escreva PENDENTE no campo Status e não use uma lista real de clientes na primeira execução.

Abra o Apps Script e cole o código

Na planilha, acesse Extensões > Apps Script. Apague o conteúdo inicial do editor, cole o código abaixo e clique em salvar:

Trecho ilustrativo de código do Google Apps Script que envia e-mail com MailApp
O código usa MailApp para enviar e depois grava o status na mesma linha.
const CONFIG = {
  aba: 'Solicitações',
  statusPendente: 'PENDENTE',
  statusEnviado: 'ENVIADO',
  statusErro: 'ERRO'
};

function processarPendencias() {
  const lock = LockService.getScriptLock();
  if (!lock.tryLock(10000)) return;

  try {
    const planilha = SpreadsheetApp.getActiveSpreadsheet();
    const aba = planilha.getSheetByName(CONFIG.aba);
    if (!aba) throw new Error(`A aba "${CONFIG.aba}" não existe.`);

    const dados = aba.getDataRange().getValues();
    const limite = MailApp.getRemainingDailyQuota();
    let enviados = 0;

    for (let i = 1; i < dados.length && enviados < limite; i++) {
      const [data, cliente, email, assunto, mensagem, status] = dados[i];
      const linha = i + 1;
      const atual = String(status || '').trim().toUpperCase();

      if (atual !== CONFIG.statusPendente) continue;

      if (!email || !String(email).includes('@')) {
        aba.getRange(linha, 6, 1, 3)
          .setValues([[CONFIG.statusErro, '', 'E-mail inválido']]);
        continue;
      }

      const corpo = [
        `Olá ${cliente || ''},`,
        '',
        'Recebemos sua solicitação.',
        `Mensagem: ${mensagem || ''}`,
        '',
        'Esta é uma resposta automática.'
      ].join('\n');

      MailApp.sendEmail({
        to: String(email).trim(),
        subject: String(assunto || 'Atualização'),
        body: corpo,
        name: 'Atendimento automático'
      });

      aba.getRange(linha, 6, 1, 3)
        .setValues([[CONFIG.statusEnviado, new Date(), '']]);
      enviados++;
    }
  } finally {
    lock.releaseLock();
  }
}

Há três detalhes importantes no exemplo:

  • LockService evita duas execuções simultâneas processando a mesma fila.
  • getRemainingDailyQuota() consulta a cota disponível antes do laço, em vez de assumir que o envio é ilimitado.
  • O status só vira ENVIADO depois que sendEmail() termina sem lançar erro. Isso reduz o risco de marcar uma mensagem como concluída quando ela falhou.

Autorize e faça o primeiro teste

  1. No editor, selecione a função processarPendencias e clique em Executar.
  2. O Google solicitará autorização para acessar a planilha e enviar e-mails. Revise a conta e permita o acesso se você confia no código.
  3. Volte à planilha e confira se a linha de teste mudou para ENVIADO, se a data apareceu em “Enviado em” e se a mensagem chegou.
  4. Se algo der errado, abra a área de execuções do Apps Script. O erro costuma indicar aba inexistente, permissão, endereço inválido ou cota esgotada.

Não pule o teste manual. Ele confirma duas coisas diferentes: que a conta autorizou o script e que a ordem das colunas corresponde ao código.

Crie o gatilho automático

Depois do teste, abra a seção Gatilhos no menu lateral do Apps Script e clique em Adicionar gatilho. Escolha:

  • função: processarPendencias;
  • origem do evento: Baseado em tempo;
  • frequência: por exemplo, uma vez por dia ou a cada hora, conforme o volume.
Fluxo ilustrativo de um gatilho instalável executando uma automação de planilha
O gatilho instalável agenda a execução sem exigir que alguém abra a planilha.

Gatilhos instaláveis podem chamar serviços que exigem autorização, ao contrário de algumas limitações dos gatilhos simples. Eles também podem ser baseados em horário, edição, mudança estrutural ou envio de formulário. A regra é executada com a autorização de quem criou o gatilho; portanto, o remetente tende a ser a conta do proprietário da automação.

Se você precisa reagir assim que um Google Forms enviar uma resposta, pode escolher um gatilho de envio de formulário. Nesse caso, adapte a posição das colunas ao formato gerado pelo Forms e teste novamente antes de colocar o fluxo em produção.

Como evitar mensagens duplicadas

A coluna Status é o controle mais simples: apenas linhas PENDENTE entram no envio e, ao terminar, recebem ENVIADO. Não apague as linhas processadas. Manter o histórico permite investigar um erro e descobrir quando cada mensagem foi enviada.

O LockService ajuda quando duas execuções começam quase ao mesmo tempo, mas não é um sistema de fila completo. Para operações críticas, inclua um identificador único, registre tentativas e considere uma ferramenta de atendimento ou banco de dados.

Limites que mudam o desenho da automação

O Apps Script não é um servidor de e-mail ilimitado. Na página de cotas consultada em 18 de agosto de 2026, o Google informa 100 destinatários por dia para contas de consumidor e 1.500 para contas Google Workspace. A mesma documentação lista limite de 50 destinatários por mensagem e até seis minutos por execução. Esses valores são por usuário, podem depender de outras cotas do Google e estão sujeitos a alteração.

Na prática, isso significa:

  • não use este exemplo para disparo em massa;
  • divida uma fila grande em execuções menores e monitore as falhas;
  • evite colocar endereços em cópia sem necessidade, porque cada destinatário conta para a cota;
  • para marketing, use uma plataforma própria, com descadastro, métricas e controle de consentimento.

O método MailApp.getRemainingDailyQuota() retorna uma estimativa da cota restante para a execução atual. Ele é útil para não iniciar um lote maior que o permitido, mas não substitui o tratamento de erros.

Erros comuns

“A aba não existe”

O código procura exatamente a aba Solicitações. Renomeie a aba ou altere o valor de CONFIG.aba. Espaços extras e acentos também podem fazer diferença.

O status não muda

Confira se está escrito exatamente PENDENTE. O código ignora maiúsculas e minúsculas, mas não corrige palavras como “pendente ” com problemas de estrutura ou status diferentes.

O gatilho falha quando outra pessoa edita

Isso pode ser esperado: gatilhos instaláveis executam com a conta que os criou. Verifique se essa conta continua com acesso à planilha e se a autorização do MailApp está válida.

O e-mail não chega

Veja a pasta de spam, confirme o endereço e consulte as execuções do projeto. Se a cota acabou, aguarde a janela de renovação indicada pelo Google e reduza o tamanho do lote.

Vale a pena usar Apps Script para isso?

Vale a pena quando o fluxo é pequeno, interno e baseado em uma planilha que já existe. Você ganha uma automação barata de manter, sem criar um servidor e sem copiar dados manualmente para o Gmail.

Ele deixa de ser a melhor escolha quando há milhares de destinatários, necessidade de entrega transacional, múltiplos usuários, auditoria rígida ou regras complexas de consentimento. Nesse cenário, a planilha pode continuar como fonte de dados, mas o envio deve ficar em um serviço preparado para essa finalidade.

Perguntas frequentes

O Google Apps Script envia e-mails sem eu abrir o Gmail?

Sim. Depois que o script recebe autorização e um gatilho é criado, ele pode executar a função sozinho. O envio ocorre pela conta que criou o gatilho, não pela conta de quem apenas editou a planilha.

Posso usar um gatilho simples onEdit para enviar a mensagem?

Não é o caminho recomendado. Gatilhos simples têm restrições de autorização e não devem ser usados para chamar serviços que exigem permissão, como o MailApp. Use um gatilho instalável.

Existe limite de e-mails no Apps Script?

Sim. Há cotas por usuário, por dia e por mensagem. A documentação consultada em 18 de agosto de 2026 informa 100 destinatários por dia em contas de consumidor e 1.500 em contas Google Workspace, além de limites que podem mudar.

O que acontece se o script falhar?

O Apps Script registra a execução como falha e pode enviar uma notificação por e-mail. Abra o projeto, consulte a área Executions e confira a linha que ficou como PENDENTE ou ERRO na planilha.

Conclusão

O caminho mais seguro é começar pequeno: uma aba organizada, uma linha de teste, autorização manual, conferência do resultado e só então um gatilho. O Apps Script resolve bem o trabalho repetitivo, mas as cotas, a conta do criador e a qualidade dos dados continuam sendo responsabilidade de quem monta o fluxo.