Pular para o conteúdo
Automação

Como enviar e-mails automáticos pelo Google Planilhas com Apps Script

É possível enviar e-mails automáticos a partir de uma lista do Google Planilhas sem instalar outro programa: basta combinar uma planilha com o Google Apps Script e o serviço de envio do Gmail. O script lê cada linha, monta a mensagem e registra quais contatos já receberam o e-mail.

Este tutorial mostra um fluxo pequeno, mas útil para avisos internos, confirmações, lembretes e contatos que autorizaram receber sua comunicação. Ele não substitui uma ferramenta de disparo em massa: há limites de cota, o envio sai da conta que autorizou o script e você continua responsável por trabalhar com uma lista legítima.

Planilha com colunas de nome, e-mail e status Enviado ou Pendente para evitar duplicidade
A coluna de status impede que o script trate a mesma linha como nova em toda execução.

O que você vai montar

O fluxo tem três peças:

  • Google Planilhas: guarda nome, endereço e situação de cada contato;
  • Apps Script: é o código JavaScript hospedado pelo Google que lê a planilha;
  • MailApp: serviço do Apps Script que envia o e-mail.

Para este caso, o MailApp é suficiente porque sua função é enviar mensagens. O GmailApp é mais amplo: também acessa conversas, rascunhos e marcadores do Gmail. Quanto menos acesso o script pedir, mais fácil fica entender o que ele realmente faz.

1. Prepare a planilha

Crie uma planilha nova, renomeie a primeira aba para Contatos e use esta primeira linha:

Nome Email Status
Ana ana@exemplo.com
Bruno bruno@exemplo.com

Comece com seu próprio endereço ou com duas pessoas que aceitaram o teste. Deixe a coluna Status vazia nos contatos que ainda não receberam a mensagem. Depois do envio, o código escreverá Enviado nessa célula.

2. Cole o código do Apps Script

Na planilha, abra Extensões > Apps Script, apague o conteúdo inicial e cole:

const ABA = 'Contatos';
const COLUNA_NOME = 1;
const COLUNA_EMAIL = 2;
const COLUNA_STATUS = 3;

function enviarEmails() {
  const planilha = SpreadsheetApp.getActiveSpreadsheet();
  const aba = planilha.getSheetByName(ABA);

  if (!aba) {
    throw new Error(`A aba "${ABA}" não foi encontrada.`);
  }

  const ultimaLinha = aba.getLastRow();
  if (ultimaLinha < 2) return;

  const linhas = aba.getRange(2, 1, ultimaLinha - 1, 3).getValues();

  linhas.forEach((linha, indice) => {
    const nome = String(linha[COLUNA_NOME - 1]).trim();
    const email = String(linha[COLUNA_EMAIL - 1]).trim();
    const status = String(linha[COLUNA_STATUS - 1]).trim().toLowerCase();

    if (!nome || !email || status === 'enviado') return;

    if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) {
      aba.getRange(indice + 2, COLUNA_STATUS).setValue('E-mail inválido');
      return;
    }

    const assunto = 'Uma mensagem para você';
    const corpo = `Olá, ${nome}!\n\nEsta é uma mensagem enviada a partir de uma planilha.\n\nAté mais.`;

    MailApp.sendEmail(email, assunto, corpo);
    aba.getRange(indice + 2, COLUNA_STATUS).setValue('Enviado');
  });
}

O código ignora a linha de títulos, pula linhas já marcadas como enviadas e identifica endereços obviamente inválidos. A validação não confirma se a caixa de entrada existe; ela apenas evita que um erro simples consuma uma tentativa de envio.

3. Autorize e faça o primeiro teste

  1. Clique em Salvar no editor do Apps Script.
  2. Na lista de funções, selecione enviarEmails.
  3. Clique em Executar.
  4. Na primeira execução, revise as permissões solicitadas e autorize o projeto.
  5. Abra a planilha e confira se a linha de teste passou para Enviado.

Se a mensagem não chegar imediatamente, confira também spam, promoções e o endereço digitado. Na área Execuções do Apps Script, você encontra o resultado de cada tentativa. Só marque o restante da lista depois que o teste funcionar.

4. Faça o script rodar sozinho

Para transformar o envio manual em rotina, crie um acionador instalável:

  1. No editor, clique no ícone de Acionadores (relógio).
  2. Selecione Adicionar acionador.
  3. Escolha a função enviarEmails.
  4. Em origem do evento, selecione Baseado no tempo.
  5. Escolha uma frequência, como uma vez por dia, e salve.

Segundo a documentação do Google, acionadores instaláveis podem chamar serviços que exigem autorização. Eles sempre rodam na conta de quem criou o acionador. O horário também não é um despertador exato: em acionadores recorrentes, o Apps Script pode escolher um momento dentro da janela configurada e manter esse horário aproximado nos dias seguintes.

Por que o status é tão importante?

Sem uma trava, cada execução percorreria a lista e enviaria tudo de novo. A condição status === 'enviado' transforma a planilha em um registro simples do que já foi processado. Se quiser reenviar uma mensagem, apague o status daquela linha de propósito e faça isso sabendo que o próximo acionamento a tratará como pendente.

Em um fluxo mais organizado, você pode trocar o status por colunas como Data do envio, Campanha e Erro. Se a automação crescer para várias etapas e serviços, vale comparar este caminho com uma ferramenta visual como o workflow de webhook no n8n.

Limites que você precisa conhecer

As cotas do Apps Script variam conforme o tipo de conta e podem mudar sem aviso. Na consulta feita em 26 de agosto de 2026, a página oficial listava:

  • 100 destinatários por dia para contas de consumidor, como gmail.com;
  • 1.500 destinatários por dia para contas do Google Workspace;
  • até 50 destinatários por mensagem;
  • até seis minutos por execução;
  • no máximo 20 acionadores por usuário e por script.

Esses números são cotas do serviço, não uma promessa de entrega na caixa de entrada. Se o limite for atingido, a execução pode lançar uma exceção e parar. Para listas grandes, campanhas, descadastramento, métricas e controle de reputação, use uma plataforma apropriada em vez de forçar uma conta pessoal.

Erros comuns e como corrigir

“A aba Contatos não foi encontrada”

O nome precisa ser exatamente Contatos, incluindo maiúsculas e sem espaço extra. Se preferir outro nome, altere o valor da constante ABA.

O script envia repetido

Verifique se a terceira coluna está realmente sendo preenchida com Enviado. Também confira se você não criou dois acionadores para a mesma função. Apague o duplicado no menu de acionadores.

O envio para no meio da lista

Veja a mensagem na área de execuções. Cota excedida, endereço inválido ou tempo máximo são causas comuns. Como o status é gravado depois do envio, uma falha entre essas duas operações pode exigir uma conferência manual para evitar reenvio.

Quero enviar HTML ou anexos

O método com três argumentos usado aqui envia texto simples, que é a opção mais previsível para começar. O MailApp.sendEmail também aceita opções, como htmlBody e anexos, mas adicione esses recursos apenas depois de validar o fluxo básico.

Conclusão

Para poucos avisos e uma rotina controlada, Google Planilhas com Apps Script resolve o problema com pouco código e sem servidor próprio. A combinação fica especialmente interessante quando a lista já nasce em uma planilha e você precisa apenas transformar linhas pendentes em mensagens.

O ponto de atenção é não confundir automação simples com plataforma de e-mail marketing. Teste com poucos destinatários, mantenha o status atualizado, respeite consentimento e acompanhe as cotas antes de colocar o acionador para funcionar todos os dias.

Perguntas frequentes

Posso usar uma conta Gmail comum?

Sim. A documentação do Apps Script diferencia as cotas de contas de consumidor e do Google Workspace; a conta comum tem limite diário menor.

O e-mail sai de qual endereço?

Ele é enviado pela conta que autorizou e criou o acionador. Por isso, revise a conta ativa antes de configurar a automação.

O Apps Script envia o e-mail exatamente no horário escolhido?

Não necessariamente. Acionadores baseados no tempo podem executar dentro de uma janela aproximada, e não como um relógio exato.

Como evitar que a mesma pessoa receba a mensagem duas vezes?

Use uma coluna de status e marque a linha como Enviado depois do envio. O script deste tutorial ignora linhas com esse status.

Fontes consultadas