# Como configurar SPF, DKIM e DMARC (com registro.br e Cloudflare)

> O que é SPF, DKIM e DMARC, os registros certos para cada um e o passo a passo no registro.br, na Cloudflare e no hPanel, com os erros mais comuns e como conferir se funcionou.

Fonte: https://couryo.com/guias/spf-dkim-dmarc · Atualizado em 2026-10-08

SPF, DKIM e DMARC são três registros no DNS do seu domínio. Juntos, eles dizem aos provedores de e-mail quem pode enviar em seu nome e o que fazer com quem finge ser você. Sem eles, o seu e-mail tem muito mais chance de [cair no spam](https://couryo.com/guias/email-caindo-no-spam.md) ou de ser recusado.

## Os três em uma frase cada

| Registro | Onde fica | O que faz |
|---|---|---|
| **SPF** | TXT no domínio (ou subdomínio) do envelope | lista os servidores que podem enviar por aquele domínio |
| **DKIM** | TXT ou CNAME em `<seletor>._domainkey.seudominio` | publica a chave que confere a assinatura de cada mensagem |
| **DMARC** | TXT em `_dmarc.seudominio` | exige que SPF ou DKIM estejam **alinhados** com o domínio do `From` e diz o que fazer quando não estão |

**Alinhamento** é a palavra-chave. O DMARC passa quando pelo menos um destes vale:

- o DKIM passou **e** o domínio da assinatura (`d=`) é o domínio do `From` ou um subdomínio dele;
- o SPF passou **e** o domínio do envelope (o "return path") é o domínio do `From` ou um subdomínio dele.

## SPF

Um exemplo para quem usa Google Workspace no e-mail da empresa e mais um serviço de envio:

```text title="TXT em exemplo.com.br"
v=spf1 include:_spf.google.com include:spf.servico-de-envio.com ~all
```

Regras que evitam dor de cabeça:

- **Um registro SPF por nome.** Dois registros `v=spf1` no mesmo domínio invalidam os dois. Junte tudo num só.
- **No máximo 10 consultas de DNS.** Cada `include`, `a`, `mx` e `redirect` conta, inclusive os que estão dentro dos includes. Acima de 10, o SPF falha com `permerror`.
- **Termine com `~all` ou `-all`.** Nunca `+all`: ele autoriza o mundo inteiro.
- O SPF é conferido no **domínio do envelope**, não no `From`. Serviços que usam um subdomínio seu como return path (por exemplo, `bounces.exemplo.com.br`) levam o SPF para lá e não precisam mexer no SPF do domínio principal.

## DKIM

O serviço que envia gera a chave e diz qual registro criar. Ele pode vir de dois jeitos:

```text title="TXT (a chave publicada direto)"
servico1._domainkey.exemplo.com.br   TXT   "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."
```

```text title="CNAME (a chave fica com o serviço, que pode trocá-la sem você mexer)"
servico1._domainkey.exemplo.com.br   CNAME   servico1.chaves.servico-de-envio.com
```

- O trecho antes de `._domainkey` é o **seletor**. Cada serviço usa o seu; vários podem conviver no mesmo domínio.
- Prefira chaves de **2048 bits**. Chaves longas em TXT às vezes precisam ser quebradas em partes de até 255 caracteres; a maioria dos painéis faz isso sozinha.
- Confira que o serviço assina com **o seu domínio** (`d=exemplo.com.br`), não só com o dele. Sem isso, o DMARC não alinha.

## DMARC

Comece observando:

```text title="TXT em _dmarc.exemplo.com.br"
v=DMARC1; p=none; rua=mailto:dmarc@exemplo.com.br; adkim=r; aspf=r
```

| Parte | Significado |
|---|---|
| `p=none` | só observar e mandar relatórios; nada é bloqueado |
| `p=quarantine` | mensagens que falham vão para o spam |
| `p=reject` | mensagens que falham são recusadas |
| `rua=mailto:...` | para onde os provedores mandam os relatórios agregados (XML diário) |
| `adkim=r`, `aspf=r` | alinhamento relaxado: subdomínios contam como o mesmo domínio |
| `pct=25` | opcional: aplica a política a só uma parte das mensagens, para subir aos poucos |

Suba de `none` para `quarantine` e depois para `reject` só quando os relatórios mostrarem que **todos** os serviços que enviam pelo seu domínio (e-mail da empresa, cobrança, CRM, sistema) passam alinhados. Subir cedo demais faz e-mail legítimo sumir.

## Passo a passo na Cloudflare

1. Entre no painel, escolha o domínio e abra **DNS > Records**.
2. Clique em **Add record**.
3. Escolha o **Type** (`TXT` ou `CNAME`).
4. Em **Name**, escreva só a parte antes do domínio: `@` para o domínio principal, `_dmarc`, `servico1._domainkey` ou `bounces`. A Cloudflare completa o resto.
5. Em **Content** (ou **Target**, no CNAME), cole o valor.
6. **Nos CNAMEs de e-mail, deixe o Proxy status em "DNS only" (nuvem cinza).** Com a nuvem laranja, o registro passa a responder com os IPs da Cloudflare e o DKIM e o return path quebram.
7. Salve. Na Cloudflare, a mudança costuma aparecer em poucos minutos.

## Passo a passo no registro.br

Primeiro, descubra **quem responde pelo DNS do domínio**. No registro.br, abra o domínio e veja os servidores DNS:

- **Se usa os servidores do registro.br**, a zona é editada ali: abra o domínio, vá em **DNS > Editar zona** (ative o modo avançado se o painel pedir) e use **Nova entrada** para cada registro.
- **Se os servidores são de outro lugar** (Cloudflare, hospedagem), editar no registro.br não muda nada: crie os registros no painel desse outro lugar.

Ao criar a entrada no registro.br:

| Campo | Exemplo |
|---|---|
| Nome | só a parte antes do domínio: `_dmarc`, `servico1._domainkey`, `bounces` (deixe vazio para o domínio principal) |
| Tipo | `TXT` ou `CNAME` |
| Dados | o valor do registro |

Salve a zona. A propagação pode levar de alguns minutos a algumas horas.

## Passo a passo no hPanel (painel de hospedagem)

1. Em **Domínios**, escolha o domínio e abra **DNS / Nameservers**.
2. Na lista de registros, confira o que **já existe**: painéis de hospedagem costumam criar um SPF (e às vezes um DMARC) para o e-mail da própria hospedagem.
3. **Se já existe um SPF, edite e acrescente o `include` novo**, em vez de criar outro registro. O mesmo vale para o DMARC: um só por domínio.
4. Para cada registro novo, escolha o **Tipo**, preencha o **Nome** só com a parte antes do domínio (`@` para o principal) e o valor em **Aponta para** (CNAME) ou **Valor TXT** (TXT).
5. Salve e espere a propagação.

## Como conferir se funcionou

No terminal:

```bash title="Terminal"
dig +short TXT exemplo.com.br                    # SPF
dig +short TXT _dmarc.exemplo.com.br             # DMARC
dig +short CNAME servico1._domainkey.exemplo.com.br
```

No Windows, `nslookup -type=TXT _dmarc.exemplo.com.br` faz o mesmo. Depois, mande um e-mail para uma conta do Gmail, abra **Mostrar original** e procure `SPF: PASS`, `DKIM: PASS` e `DMARC: PASS`.

## Erros mais comuns

| Erro | Como aparece | Correção |
|---|---|---|
| Dois registros SPF | `spf=permerror` | juntar num registro só |
| Mais de 10 consultas no SPF | `spf=permerror` | tirar includes que não usa mais |
| Nome com o domínio repetido | registro em `_dmarc.exemplo.com.br.exemplo.com.br` | escrever só `_dmarc` no campo de nome |
| CNAME com proxy na Cloudflare | DKIM não encontrado | mudar para "DNS only" |
| Dois registros DMARC | DMARC ignorado | apagar um |
| DKIM do serviço, não do seu domínio | `dkim=pass` mas `dmarc=fail` | configurar o domínio próprio de assinatura no serviço |
| `p=reject` antes da hora | e-mail da cobrança ou do CRM some | voltar para `p=none`, corrigir os serviços e subir de novo |

## Onde o Couryo entra

No Couryo, você não mexe no SPF do domínio principal: o envelope usa um subdomínio seu (`bounces.`), o DKIM é publicado por CNAME (a chave pode ser trocada sem você tocar no DNS) e o DMARC começa em `p=none`. Com o domínio na Cloudflare, os registros são criados sozinhos. Depois, o agente de entregabilidade lê os relatórios e avisa quando é seguro subir para `quarantine` e `reject`, com o registro pronto. Detalhes em [Domínios e DNS](https://couryo.com/docs/domains.md).

## Perguntas frequentes

### Preciso dos três ou basta um?

Os três. O Gmail e o Yahoo exigem SPF ou DKIM de todo remetente, e SPF, DKIM e DMARC de quem envia mais de 5 mil por dia; a Microsoft exige os três de quem envia em volume. Mesmo abaixo disso, os três juntos são o que mais pesa para chegar na caixa de entrada.

### Posso ter mais de um DKIM?

Pode e é normal: cada serviço usa um seletor diferente (`google._domainkey`, `servico1._domainkey`...). O que não pode é mais de um SPF ou mais de um DMARC no mesmo nome.

### Quanto tempo o DNS leva para propagar?

Depende do TTL do registro e do painel. Na Cloudflare costuma ser questão de minutos; em outros painéis, de minutos a algumas horas. Se depois de um dia o registro não aparece no `dig`, confira se você editou o painel certo (o dos servidores DNS do domínio).

### O que coloco no rua do DMARC?

Um endereço que recebe os relatórios XML diários dos provedores. Como eles são difíceis de ler à mão, o comum é apontar para um serviço que junta e explica os relatórios.

### O SPF com ~all ou -all?

Os dois funcionam. Com DMARC em vigor, a decisão final é do DMARC, então `~all` é a escolha mais segura enquanto você ainda não conferiu todos os serviços que enviam pelo domínio.
