Pular para o conteúdo
couryo

Guias

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 Markdown

A 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#

  1. 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.
  2. 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.
  3. 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.
  4. O link aponta para o lugar errado. A URL do site configurada é localhost ou outro domínio, e o link "não funciona".
  5. 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:

  1. Verifique o domínio no seu serviço de envio e crie a credencial SMTP.
  2. Em Authentication > Emails > SMTP Settings, ligue Enable Custom SMTP e preencha remetente (no domínio verificado), servidor, porta, usuário e senha.
  3. Em Authentication > Rate Limits, ajuste o limite de e-mails por hora ao seu volume.
  4. Em Authentication > URL Configuration, confira o Site URL e as Redirect URLs.
  5. 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.

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.