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.

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 | 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:

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
- No editor, selecione a função
processarPendenciase clique em Executar. - 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.
- Volte à planilha e confira se a linha de teste mudou para ENVIADO, se a data apareceu em “Enviado em” e se a mensagem chegou.
- 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.

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.