E-mail (Resend)¶
A API envia e-mails (recuperação de senha, por exemplo) pelo Resend. O envio sai com o remetente do próprio domínio, no-reply@braggo.com.br.
Como funciona¶
- A API chama o Resend usando
Resend__ApiKey. - O Resend envia o e-mail em nome de
braggo.com.br, assinando com uma chave DKIM. - Quem recebe (Gmail, Outlook) confere os registros DNS do domínio para ter certeza de que o e-mail é legítimo.
Variáveis envolvidas (em /etc/braggo-api.env, veja Configuração e segredos):
| Variável | Valor |
|---|---|
Resend__ApiKey |
chave criada no painel do Resend |
Resend__From |
Braggo <no-reply@braggo.com.br> |
App__UrlFrontend |
https://braggo.com.br (base dos links dentro do e-mail) |
Remetente de teste
onboarding@resend.dev só entrega para o e-mail da sua conta do Resend. Usuários reais só recebem depois que o domínio estiver verificado e o Resend__From apontar para ele.
Registros DNS na Cloudflare¶
Em Domains > braggo.com.br > DNS. Os registros do e-mail ficam sempre em "DNS only" (nuvem cinza): e-mail não passa pelo proxy da Cloudflare.
| Tipo | Nome | Para que serve |
|---|---|---|
| TXT | resend._domainkey |
DKIM: chave pública para conferir a assinatura dos e-mails |
| CNAME | send |
envio e retornos (SPF/bounce) pelo subdomínio send |
| CNAME | rsend |
apoio do Resend ao subdomínio de envio |
| MX | braggo.com.br (., prioridade 0) |
"Null MX": o domínio não recebe e-mail |
| TXT | braggo.com.br (v=spf1 -all) |
SPF da raiz: ninguém envia pelo domínio raiz |
| TXT | _dmarc (v=DMARC1; p=reject;) |
política: rejeitar e-mail que falhe na autenticação |
Os valores dos registros do Resend são gerados por ele, não copie daqui: ao adicionar um domínio novo, use o botão Auto configure (conecta na Cloudflare e cria tudo) ou o Manual setup (ele lista, você cria em Add record).
Os registros do Resend ficam no subdomínio send, por isso não conflitam com o SPF e o MX da raiz.
DMARC em uma frase¶
É a regra que diz ao Gmail o que fazer com e-mail que falha na checagem:
| Política | Efeito |
|---|---|
p=none |
entrega normalmente, só observa |
p=quarantine |
manda para o spam |
p=reject |
rejeita, o e-mail nem chega |
Hoje está em reject e os e-mails legítimos passam. Se algum dia e-mails sumirem depois de uma mudança no DNS, troque temporariamente para v=DMARC1; p=none;, investigue e depois volte.
Verificar domínio no Resend (domínio novo)¶
- Painel do Resend > Domains > Add domain > digite o domínio.
- Auto configure (autorize a Cloudflare) ou Manual setup.
- Aguarde o status Verified (minutos a poucas horas).
- Só então ajuste o remetente:
sudo nano /etc/braggo-api.env # Resend__From=Braggo <no-reply@braggo.com.br>
sudo systemctl restart braggo-api
Trocar o From antes da verificação faz os envios falharem.
Como testar¶
- Em
https://braggo.com.br, dispare a recuperação de senha com um e-mail que não seja o da sua conta do Resend. - Confira: chegou (olhe o spam), o remetente é
no-reply@braggo.com.bre o link abrehttps://braggo.com.br/.... - No Gmail: três pontinhos > Mostrar original. SPF, DKIM e DMARC devem aparecer como PASS.
O painel do Resend, na aba Emails, mostra o status de cada envio (entregue, recusado, etc.).
Problemas comuns¶
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| E-mail não chega | domínio não verificado, ou From ainda onboarding@resend.dev |
confira o status no Resend e o Resend__From |
Chegou, mas o link abre localhost |
App__UrlFrontend errado ou ausente |
corrija no .env e reinicie a API |
| Erro 500 ao pedir recuperação de senha | Resend__ApiKey ausente ou inválida |
sudo journalctl -u braggo-api -n 50 --no-pager |
| Vai para o spam | DKIM/SPF não passando | veja o cabeçalho "Mostrar original" |
| Parou de funcionar do nada | chave revogada ou limite do plano | painel do Resend (Emails e API Keys) |