Sim, dá para enviar e-mails automáticos pelo Google Sheets sem contratar um servidor. Com o Google Apps Script, você lê as linhas de uma planilha e dispara uma mensagem quando alguém muda um status, envia um formulário ou chega o horário definido.
Neste guia, vou montar o exemplo mais útil para começar: uma aba com nome, e-mail e mensagem, na qual a troca do status para “Enviar” dispara o aviso e registra a data do envio. O método usa um gatilho instalável, porque o envio de e-mails exige autorização da conta.

O que você precisa antes de começar
- Uma conta Google com acesso ao Google Sheets;
- uma planilha criada no Google Drive;
- permissão para editar a planilha e o projeto do Apps Script;
- um endereço de teste que você possa consultar antes de enviar para clientes.
O Apps Script é um ambiente baseado em JavaScript que roda nos servidores do Google. Você não precisa instalar Node.js, publicar uma API ou deixar o computador ligado. Em troca, o script segue limites de execução, envio e autorização da conta.
Para este caso, a planilha terá cinco colunas na primeira linha: Nome, Email, Assunto, Status e Enviado em. Use exatamente esses nomes para que o código abaixo funcione sem adaptação.
1. Monte a planilha de disparo
Crie uma aba chamada Leads e preencha a linha 1 assim:
| Nome | Assunto | Status | Enviado em | |
|---|---|---|---|---|
| Ana | seu-email-de-teste@exemplo.com | Confirmação do cadastro | Enviar |
Deixe a coluna Enviado em vazia. O fluxo só será executado quando você alterar manualmente a célula da coluna Status para Enviar. Depois do envio, o script muda o status para Enviado e grava um horário na última coluna. Esse registro é a trava simples que impede o mesmo contato de receber a mensagem toda vez que a linha for editada.
2. Cole o código no Apps Script
Na planilha, abra Extensões > Apps Script, apague o conteúdo inicial e cole o código a seguir:
const ABA = 'Leads';
const STATUS_PARA_ENVIAR = 'Enviar';
const STATUS_ENVIADO = 'Enviado';
/** Executa uma vez para liberar a autorização de envio. */
function autorizar() {
MailApp.getRemainingDailyQuota();
}
/**
* Envia uma mensagem quando o status da linha vira "Enviar".
* Este código deve ser chamado por um gatilho instalável de edição.
*/
function enviarEmailAoEditar(e) {
if (!e || !e.range) return;
const range = e.range;
const sheet = range.getSheet();
if (sheet.getName() !== ABA) return;
const colunaStatus = 4;
const colunaData = 5;
if (range.getColumn() !== colunaStatus || range.getRow() === 1) return;
const row = range.getRow();
const [nome, email, assunto, status, enviadoEm] =
sheet.getRange(row, 1, 1, colunaData).getDisplayValues()[0];
if (status !== STATUS_PARA_ENVIAR || enviadoEm !== '') return;
if (!email || !email.includes('@')) {
sheet.getRange(row, colunaStatus).setValue('E-mail inválido');
return;
}
const quota = MailApp.getRemainingDailyQuota();
if (quota < 1) {
sheet.getRange(row, colunaStatus).setValue('Cota esgotada');
return;
}
const nomeSeguro = nome || 'Olá';
const assuntoFinal = assunto || 'Mensagem automática';
const corpo = `${nomeSeguro},\n\nEsta é uma mensagem enviada automaticamente a partir do Google Sheets.\n\nSe precisar de ajuda, responda a este e-mail.`;
const html = `<p>${nomeSeguro},</p><p>Esta é uma mensagem enviada automaticamente a partir do Google Sheets.</p><p>Se precisar de ajuda, responda a este e-mail.</p>`;
MailApp.sendEmail({
to: email,
subject: assuntoFinal,
body: corpo,
htmlBody: html,
name: 'Automação da planilha'
});
sheet.getRange(row, colunaStatus).setValue(STATUS_ENVIADO);
sheet.getRange(row, colunaData).setValue(new Date());
}
A função autorizar() não manda mensagem: ela apenas chama o serviço do MailApp para que o Google mostre a tela de consentimento. Já enviarEmailAoEditar(e) recebe o evento da edição e não deve ser executada pelo botão “Executar” do editor, pois uma execução manual não tem o objeto e.
3. Dê a autorização necessária
No editor, selecione autorizar na lista de funções e clique em Executar. Revise a conta escolhida e permita o acesso solicitado. O MailApp serve para enviar mensagens, mas não lê a caixa de entrada do Gmail. Ele também permite definir assunto, corpo em texto, corpo HTML, cópia e anexos.
Se aparecer um alerta de aplicativo não verificado em um projeto criado por você, confira se o endereço do projeto e a conta são os esperados antes de avançar. Não conceda acesso a um código que você não entende ou que veio de uma fonte desconhecida.
4. Crie o gatilho instalável
No Apps Script, clique no ícone de Gatilhos no menu lateral e depois em Adicionar gatilho. Selecione:
- Função:
enviarEmailAoEditar; - origem do evento: Da planilha;
- tipo de evento: Ao editar;
- salve a configuração.
Esse é o detalhe que costuma quebrar tutoriais rápidos. Um onEdit(e) simples tem restrições e não é o caminho adequado para chamar serviços que precisam de autorização. O gatilho instalável pode acessar o MailApp e sempre executa com a autorização de quem o criou. A documentação do Google explica também que alterações feitas pelo próprio script não disparam outro gatilho de edição, por isso marcar a linha como enviada não cria um ciclo infinito.
O guia oficial de gatilhos instaláveis também alerta que eles rodam sob a conta do criador. Se várias pessoas editam a planilha, o e-mail continuará saindo da conta que criou o gatilho, não necessariamente da conta da pessoa que alterou a célula.
5. Faça um teste sem atingir clientes
Coloque seu próprio endereço na coluna Email, preencha o nome e o assunto e deixe Enviado em vazio. Na coluna Status, digite Enviar. Aguarde alguns segundos e confira:
- o e-mail chegou e o remetente é a conta autorizada;
- o assunto e o nome foram preenchidos;
- o status mudou para
Enviado; - a data apareceu na última coluna;
- em Execuções, a função terminou sem erro.
Se nada acontecer, abra a página de gatilhos e confirme se ele está ativo. Depois confira se a aba se chama exatamente Leads, se você editou a coluna D e se a célula da coluna E estava realmente vazia. O filtro da planilha não muda a regra do código: ele olha a linha editada e seus cinco valores.
Como adaptar o fluxo para situações reais
Enviar quando um formulário for respondido
Para responder a um Google Forms, troque o gatilho “Ao editar” por “Ao enviar formulário” e ajuste o código para ler o objeto de evento do formulário. É uma alternativa melhor quando o contato não deve editar a planilha diretamente. O próprio Google mantém um exemplo de mail merge com Gmail e Sheets, que usa cabeçalhos da planilha como campos de um modelo.
Usar um horário fixo
Se você prefere revisar todas as linhas e disparar uma vez por dia, crie um gatilho baseado em tempo. Nesse modelo, a função percorre a planilha procurando status “Enviar”. O horário de um gatilho recorrente pode ter alguma variação: o Google informa que um gatilho criado para 9h pode ser executado em uma janela entre 9h e 10h, mantendo o padrão nos dias seguintes.
Enviar um modelo mais completo
Você pode trocar o HTML simples por um modelo com identidade visual, incluir cc, bcc, anexos ou uma resposta definida. Faça isso com parcimônia: e-mail transacional deve ser fácil de ler no celular, e conteúdo HTML pesado só aumenta a chance de cair em filtros ou ser exibido de forma estranha.
Limites que você precisa conhecer
Apps Script não é uma plataforma de disparo em massa. Na página de cotas consultada em 22 de agosto de 2026, o Google informa limite diário de 100 destinatários para contas de consumidor e 1.500 para contas Google Workspace. A tabela também informa até 50 destinatários por mensagem, execução de script de até seis minutos e limite de 20 gatilhos por usuário em cada projeto. Esses valores podem mudar sem aviso.
Há ainda limites do próprio Gmail, políticas contra spam e regras de consentimento que não desaparecem porque o envio foi feito por código. Para newsletter, cobrança ou comunicação em grande escala, use uma plataforma própria de e-mail transacional ou marketing. A planilha é ótima para um processo pequeno e controlado; não deve virar uma central improvisada de disparos.
Se a sua automação começa a acumular várias etapas, vale comparar esse caminho com o fluxo de alertas por e-mail no Google Sheets e com ferramentas visuais como n8n ou Make. O Apps Script costuma ganhar em custo e flexibilidade, mas perde em monitoramento, interface para a equipe e manutenção quando o projeto cresce.
Erros comuns e como corrigir
- “Cannot read properties of undefined”: você executou a função de evento manualmente. Teste editando a célula pela planilha.
- O e-mail não sai: execute
autorizar(), confira o gatilho e veja os registros em Execuções. - A mesma pessoa recebe várias mensagens: mantenha a coluna Enviado em e não apague o registro antes de investigar.
- O remetente é inesperado: gatilhos instaláveis usam a conta que os criou.
- “Service invoked too many times”: você atingiu uma cota. Espere a janela de reinício ou reduza a frequência do processo.
FAQ
Preciso pagar para usar o Apps Script?
Não necessariamente. O Apps Script está disponível para contas Google, mas os limites e alguns recursos podem variar entre contas de consumidor e Google Workspace. O envio continua sujeito às cotas do Google.
Posso enviar e-mail quando qualquer célula mudar?
Sim, mas é mais seguro restringir o disparo a uma coluna de status, como no exemplo. Assim, uma correção no nome ou no assunto não gera uma mensagem acidental.
O código funciona no Excel?
Não diretamente. Google Apps Script foi criado para os serviços do Google. No Excel, você precisaria de outra solução, como Office Scripts, Power Automate ou VBA, dependendo do ambiente.
Como impedir um novo envio?
Não apague a data da coluna Enviado em e mantenha o status como Enviado. Para reenviar conscientemente, limpe a data, revise os dados e altere o status para Enviar.
Conclusão
Para uma equipe pequena, o Google Sheets com Apps Script resolve uma tarefa que normalmente exigiria um servidor: transformar uma linha aprovada em um e-mail rastreável. O segredo não está em colar um código enorme, e sim em usar um gatilho instalável, registrar o que já foi enviado e respeitar as cotas.
Comece com um endereço de teste, valide o fluxo e só depois conecte a planilha ao processo real. Quando o volume ou a responsabilidade crescer, migre para uma ferramenta feita para envio e monitoramento. Automação simples é útil; automação sem freio vira problema.