E-mail de confirmação não chega (Supabase, Firebase, WordPress)
Por que o e-mail de confirmação de cadastro não chega, o que conferir primeiro e como resolver no Supabase Auth, no Firebase Auth e no WordPress, com SMTP próprio e domínio autenticado.
Atualizado em
Ver em MarkdownA pessoa se cadastra, vê "enviamos um link para o seu e-mail" e nada chega. Ela tenta de novo, desiste, e você perde o cadastro sem nem saber. Na maior parte das vezes, a causa é uma destas cinco, e dá para descobrir qual em poucos minutos.
As 5 causas mais comuns#
- O serviço de e-mail embutido não serve para produção. Supabase, Firebase e WordPress vêm com um envio padrão pensado para testar, com limites baixos ou um remetente genérico que os filtros não conhecem.
- O domínio do remetente não está autenticado. Sem SPF, DKIM e DMARC alinhados, o e-mail cai no spam ou é recusado. Veja Como configurar SPF, DKIM e DMARC.
- Um limite de envio foi atingido. O próprio sistema de autenticação tem limite de e-mails por hora; quem testa muitas vezes seguidas bate nele.
- O link aponta para o lugar errado. A URL do site configurada é
localhostou outro domínio, e o link "não funciona". - Um filtro abriu o link antes da pessoa. Alguns provedores corporativos visitam os links para checar segurança. Se o link é de uso único, quando a pessoa clica ele já foi gasto.
Primeiro: descubra onde o e-mail parou#
| Pergunta | Onde olhar |
|---|---|
| O app chegou a pedir o envio? | logs do seu backend ou do sistema de autenticação |
| O servidor de envio aceitou? | o painel ou o log do serviço de SMTP ou da API (procure pelo destinatário) |
| O servidor de destino aceitou? | a resposta SMTP do destino: 250 é aceito; 4xx é adiado; 5xx é recusado |
| Chegou e foi para o spam? | peça à pessoa para procurar na caixa de spam e nas abas do Gmail |
Se o e-mail nem saiu do app, o problema é de configuração ou de limite. Se saiu e voltou com erro, o código diz o motivo: veja os códigos de devolução SMTP. Se foi entregue e a pessoa não acha, é filtro de spam.
Supabase Auth#
O e-mail embutido do Supabase tem limite de envio por hora bem baixo e, em projetos novos, só entrega para endereços da equipe do projeto. Em produção, ligue um SMTP personalizado:
- Verifique o domínio no seu serviço de envio e crie a credencial SMTP.
- Em Authentication > Emails > SMTP Settings, ligue Enable Custom SMTP e preencha remetente (no domínio verificado), servidor, porta, usuário e senha.
- Em Authentication > Rate Limits, ajuste o limite de e-mails por hora ao seu volume.
- Em Authentication > URL Configuration, confira o Site URL e as Redirect URLs.
- Teste e veja Logs > Auth: erros de SMTP aparecem ali, com o código.
O passo a passo com os valores do Couryo, incluindo a CLI e a API de gerenciamento, está no guia Supabase Auth com SMTP personalizado.
Firebase Auth#
Por padrão, o Firebase envia de um endereço do domínio do projeto no Firebase, que não é o seu. Para o e-mail sair do seu domínio:
- configure o SMTP em Authentication > Templates > SMTP settings, com remetente no seu domínio verificado; ou
- gere o link no backend com o Admin SDK (
generateEmailVerificationLink) e envie você mesmo, com o seu HTML.
Os dois caminhos, com código, estão em Firebase Auth.
WordPress#
O WordPress envia pela função mail() da hospedagem, sem a autenticação do seu domínio. É a causa mais comum de "o e-mail de cadastro e de senha do site não chega". Instale um plugin de SMTP (ou use o gancho phpmailer_init), aponte para um serviço autenticado e force o remetente no seu domínio. Passo a passo em WordPress e WooCommerce.
Quando o link chega "inválido ou expirado"#
Se o e-mail chega mas o link já não funciona quando a pessoa clica, quase sempre é um filtro corporativo que visitou o link antes. Três saídas:
- Código de 6 dígitos no lugar do link (o Supabase oferece
{{ .Token }}nos modelos); - página intermediária com um botão "Confirmar e-mail": a visita do filtro só abre a página, e a confirmação acontece no clique (um POST);
- links com validade razoável e a opção de pedir outro na própria tela.
O texto do e-mail também conta#
- Assunto claro e com o nome do app: "Confirme o seu e-mail no Exemplo".
- Remetente reconhecível: "Exemplo nao-responda@exemplo.com.br", sempre no mesmo domínio do site.
- Parte em texto além do HTML, e o link escrito por extenso como alternativa ao botão.
- Sem encurtador de link, sem propaganda e sem imagem pesada.
- Uma linha dizendo por que a pessoa recebeu e o que fazer se não foi ela.
Onde o Couryo entra#
O Couryo funciona como o SMTP personalizado do Supabase, do Firebase e do WordPress (servidor smtp.couryo.com, usuário couryo e a chave de API como senha). Cada e-mail de confirmação aparece numa linha do tempo com a resposta do servidor de destino, e quando um provedor recusa, a explicação diz por quê em português. Com uma chave de teste, dá para testar o fluxo inteiro sem entregar nada. Veja o início rápido.
Perguntas frequentes#
Por que o e-mail de confirmação chega para mim e não para os clientes?#
No Supabase, o envio embutido só entrega para endereços da equipe do projeto. Em outros casos, você está testando com o mesmo provedor sempre (o seu Gmail, por exemplo) e o problema aparece em outro (Outlook, e-mail corporativo). Teste com endereços de provedores diferentes.
O e-mail de confirmação demora muito para chegar. É normal?#
Não. Confirmação deveria chegar em segundos. Atraso de minutos ou horas costuma ser o provedor adiando a entrega (resposta 4xx) por volume ou reputação, ou uma fila travada no seu sistema. A resposta do servidor de destino mostra qual dos dois.
Posso desligar a confirmação de e-mail para não perder cadastros?#
Pode, mas a lista passa a ter endereços digitados errado e falsos, que voltam como devolução e derrubam a reputação do domínio. O melhor é fazer a confirmação chegar.
Preciso de um domínio próprio para enviar?#
Para produção, sim. Enviar de um domínio genérico (do serviço de autenticação ou de um provedor gratuito) deixa a mensagem sem autenticação alinhada e reconhecimento da marca, e é onde os filtros mais desconfiam.