Verificar SPF — Registro SPF
Para verificar o SPF de um domínio como fazem os servidores de e-mail de destino, veja cada include com o próprio custo em consultas DNS, o total corrido contra o limite de 10, as consultas vazias e o resultado para qualquer IP de envio, com o termo que decidiu. Serve também para validar o SPF depois de uma mudança.
Exatamente o nome que você digita: o SPF não tem herança, então mail.example.com precisa do próprio registro.
O que é um registro SPF?
Um registro SPF é um registro TXT que lista os servidores autorizados a enviar e-mails por um domínio. Ele começa com v=spf1, cita os remetentes termo por termo e termina dizendo o que os servidores de destino devem pensar de todos os outros (RFC 7208, abril de 2014, ainda o padrão atual).
Os servidores de destino o conferem com o endereço do servidor que se conecta e com o domínio do remetente do envelope, o MAIL FROM ou Return-Path, não com a linha From: que o leitor vê. Ligar o SPF ao From: é trabalho do DMARC.
Um registro cobre só o nome exato em que está publicado: o SPF não tem herança, então mail.example.com precisa do próprio registro. Um domínio que não envia e-mails deve publicar v=spf1 -all.
O include aponta para _spf.google.com · 8 intervalos, sem mais consultas
ip4:74.125.0.0/16ip4:209.85.128.0/17ip6:2001:4860:4864::/56ip6:2404:6800:4864::/56ip6:2607:f8b0:4864::/56ip6:2800:3f0:4864::/56ip6:2a00:1450:4864::/56ip6:2c0f:fb50:4864::/56~all
v=spf1, no começo: um registro que comece de outro jeito não é um registro SPF.redirect= passa a verificação para outro registro; exp= explica um fail.~all. Registrado pelo Google Public DNS em 24 de outubro de 2026.Como verificar um registro SPF
Digite um domínio acima e o verificador lê os registros TXT dele, escolhe o que começa com v=spf1 e segue cada include e redirect como um servidor de destino faria, contando cada consulta DNS pelo caminho. É o jeito mais rápido de validar o SPF de um domínio.
À mão, peça os registros TXT: dig TXT example.com +short ou nslookup -type=TXT example.com. A resposta traz todos os registros TXT do nome; o registro SPF é o que começa com v=spf1, e um registro longo vem como várias strings entre aspas que o SPF junta sem espaço. Cada include é mais uma consulta, e você teria de contá-las por conta própria.
Para ver se um servidor específico pode enviar, passe para Testar um IP: ele faz a mesma verificação para esse endereço e mostra o termo que combinou.
dig TXT example.com +shortTodos os registros TXT do nome, como o seu resolvedor os tem; o registro SPF é o que começa com v=spf1. Rode de novo para cada include.
$ dig TXT github.com @dns1.p08.nsone.net +norec +noall +answer github.com. 300 IN TXT "v=spf1 ip4:192.30.252.0/22 include:spf.protection.outlook.com include:_netblocks.google.com include:_netblocks2.google.com include:mail.zendesk.com include:_spf.salesforce.com include:servers.mcsv.net include:mktomail.com include:sendgrid.net ip4:62.253.2" "27.114 ip4:166.78.69.169 ip4:166.78.69.170 ip4:166.78.71.131 ~all" # e depois cada include, uma consulta por vez: $ dig +short TXT _spf.salesforce.com "v=spf1 exists:%{i}._spf.mta.salesforce.com -all"
- Um registro começa com v=spf1. Os 23 outros registros TXT ao lado dele (tokens de verificação e coisas do tipo) não importam para o SPF, a não ser pelo tamanho da resposta.
- 2 strings, juntas sem espaço. A divisão de 255 bytes cai dentro de
ip4:62.253.227.114: os servidores de destino juntam as strings de volta, então tudo bem. - TTL 5 minutos. Por quanto tempo os resolvedores podem guardar esta cópia depois de uma mudança. O servidor da própria zona diz 5 minutos; um resolvedor mostra o que resta da cópia dele.
- Cada include é uma consulta própria. Seguir o registro de github.com leva 10 consultas, contando os aninhados. O dig mostra um nome por vez: somar até 10 fica por sua conta.
$ nslookup -type=TXT github.com 8.8.8.8
# todos os registros TXT do nome, do Google Public DNS PS> Resolve-DnsName -Name github.com -Type TXT -Server 8.8.8.8
Lendo o resultado: a árvore de includes
O veredito diz o que os servidores de destino recebem para um remetente que o registro não lista: válido com o final dele (softfail para ~all, fail para -all), ou um permerror com a causa, ou "não deu para verificar" quando o DNS não respondeu.
A coluna azul-marinho é o orçamento de consultas: uma célula por consulta DNS, colorida pelo include que a gasta, o total corrido contra 10 e as consultas vazias como anéis. Passada a 10ª, as células ficam vermelhas e o ramo em que os servidores de destino param é marcado.
A visualização Árvore lista as leituras, com as falhas primeiro, cada uma com a seção da RFC e a correção, e depois cada consulta na ordem em que um servidor de destino as faz.

O vereditoO que os servidores de destino recebem para um remetente que o registro não lista, e o final que decide isso.O registro, termo por termoCada termo colorido por tipo; um include leva a marca do dono e o próprio custo em consultas.As leiturasUm registro, sintaxe válida, consultas, consultas vazias, o final, ptr, DMARC: as falhas primeiro, cada uma com a correção.O orçamento de consultasCada consulta DNS como uma célula, colorida pelo include que a gasta, contra o limite de 10.O custo de cada includeUm ramo por include: as próprias células, o que ele aninha e o total corrido.As consultas vaziasAnéis para consultas que voltaram vazias; a terceira encerra a verificação.O limite de 10 consultas e "too many DNS lookups" (permerror)
Os servidores de destino contam cada termo que exige uma consulta DNS, include, a, mx, ptr, exists e redirect, por todos os includes aninhados, e param em 10. A 11ª dá permerror (RFC 7208 §4.6.4). ip4, ip6, all e exp não custam nada.
É um permerror, não um fail: o que o servidor de destino faz com ele é escolha dele, mas com o DMARC um permerror nunca conta como pass. E, como a verificação para na primeira combinação, um registro acima do limite ainda passa para os remetentes listados no começo e só quebra para os listados no fim.
O custo se esconde dentro dos includes: include:_netblocks.mimecast.com gasta 9 sozinho, o do Yandex 360 gasta 8, o do Freshdesk 7, o do Mailgun 5. Os includes do Google e do Microsoft 365 custam 1 cada. Para ficar abaixo de 10, tire os remetentes que você não usa mais e mova um remetente em massa para um subdomínio com registro próprio.
v=spf1 include:spf.protection.outlook.com include:_netblocks.mimecast.com include:mailgun.org include:sendgrid.net -all
Todos os outros também recebem permerror, não o fail do -all do registro: os servidores de destino param antes de chegar a ele.
- _netblocks.mimecast.comMimecast9 consultas
- _spf.yandex.netYandex 3608 consultas
- email.freshdesk.comFreshdesk7 consultas
- mailgun.orgMailgun5 consultas
- icloud.comiCloud+5 consultas
- spf.titan.emailTitan Email4 consultas
- secureserver.netGoDaddy3 consultas
- _spf.google.comGoogle Workspace1 consulta
- spf.protection.outlook.comMicrosoft 3651 consulta
O que são consultas vazias (void lookups)?
Uma consulta vazia é uma consulta que volta sem registros: o nome não existe (NXDOMAIN) ou existe sem o registro pedido. Os servidores de destino devem permitir duas; a terceira é permerror (RFC 7208 §4.6.4).
Um termo que aponta para um host que sumiu, a:old.example.com, não é um erro por si só: ele só não combina e conta uma consulta vazia. O mesmo vale para exists:%{i}._spf.mta.salesforce.com com todo remetente que a Salesforce não lista, e é por isso que a ordem dos includes importa.
Uma falha do servidor ou um timeout não é uma consulta vazia: é um temperror, e os servidores de destino costumam tentar de novo mais tarde.
O registro de salesforce.com para 192.0.2.1, registrado em 24 de outubro de 2026
v=spf1 include:_spf.google.com include:_spf.salesforce.com exists:%{i}._spf.corp.salesforce.com ~all
exists:%{i}._spf.mta.salesforce.com192.0.2.1._spf.mta.salesforce.com → NXDOMAIN · consulta 3 · em _spf.salesforce.comexists:%{i}._spf.corp.salesforce.com192.0.2.1._spf.corp.salesforce.com → NXDOMAIN · consulta 4 · em salesforce.com
Resultado: softfail, com as duas consultas vazias permitidas gastas
a:mail.example.com para um nome que ainda existe, mas não tem mais um endereço: NOERROR sem resposta. Sem combinação, uma consulta vazia, e a verificação segue.NODATAvaziaexists:%{i}._spf.mta.salesforce.com monta um nome a partir de cada IP de envio; para um endereço que a Salesforce não lista, a resposta é NXDOMAIN: uma consulta vazia a cada vez.NXDOMAINvaziamx:shop.example.com, um nome que sumiu, depois de 2 consultas vazias: os servidores de destino param aqui.NXDOMAINpermerrorinclude:_spf.vendor.example: o DNS falhou, então nada conta como consulta vazia.SERVFAILtemperror, não é uma consulta vaziaO include include:spf.bmv.jp de blastmail começa com dois termos exists assim: para um endereço que ele não lista, gasta sozinho as duas consultas vazias permitidas.
SPF flattening: quando ajuda e quando quebra
O flattening troca um include pelos endereços que ele lista, para o registro custar menos consultas. Funciona para intervalos que mudam pouco e sai pela culatra quando um provedor acrescenta um servidor que você não copiou: os e-mails dele passam então a falhar no SPF.
A Microsoft diz para não achatar include:spf.protection.outlook.com, e os includes do Google e da Microsoft já custam uma consulta cada. Mover um remetente em massa para um subdomínio como news.example.com dá a ele um registro, e 10 consultas, só dele.
Antes
include:mailgun.org
- Consultas
- 5
- Registros buscados
- 5
- Bytes no seu registro
- 19
- Mailgun muda um intervalo
- pego na hora
Depois
ip4:159.135.224.0/20 ip4:69.72.32.0/20 ip4:204.220.90.0/23 ip4:204.220.92.0/22 +18 a mais
- Consultas
- 0
- Bytes no seu registro
- 450
- Strings TXT necessárias
- 2
- Mailgun muda um intervalo
- sua cópia está velha
O risco da cópia velha. Você copia 22 intervalos hoje; quando a Mailgun acrescenta um, os e-mails dele falham no SPF até alguém notar e atualizar o registro.
- copiado
- Mailgun acrescenta um intervalo
- os e-mails dele falham no SPF
~all vs -all (e o DMARC)
O último termo diz o que acontece com todo remetente não listado. -all é fail, a declaração mais forte; ~all é softfail, "provavelmente não"; ?all é neutral, que os servidores de destino tratam como a ausência de SPF; +all deixa todo mundo passar e nunca deve ser publicado.
Entre ~all e -all não existe resposta errada. O Google documenta ~all para o Google Workspace e a Microsoft -all para o Microsoft 365. Com o DMARC em modo de aplicação, o ~all deixa o DMARC decidir pelo DKIM: alguns servidores de destino rejeitam por -all antes de o DMARC ver uma assinatura DKIM válida, então e-mails encaminhados podem voltar (RFC 9989 §7.1).
~all-all?all?all: inofensivo ali, já que só um pass dentro de um include combina.+all-all com DMARC em p=reject
- fail no SPF
- rejeitado no SMTP
- DKIM nunca verificado
Alguns servidores de destino agem primeiro pelo SPF, então uma mensagem encaminhada com assinatura DKIM válida pode ser recusada antes de o DMARC rodar, e a perda nunca aparece nos relatórios do DMARC.
~all com DMARC em p=reject
- softfail no SPF
- o DMARC verifica o DKIM
- DKIM alinhado: pass
O DMARC decide. Sem uma assinatura DKIM, porém, a Microsoft diz que o DMARC é na prática ignorado nas falhas de ~all, e recomenda -all por isso.
~all e -all são escolhas válidas; ?all não diz nada, e +all deixa qualquer um passar.Erros comuns de SPF e como corrigi-los
A maioria dos registros quebrados vem de três deslizes: um segundo registro SPF acrescentado ao lado do primeiro em vez de juntá-los, um include de um fornecedor que já saiu e um valor copiado da documentação com um erro de digitação.
A documentação dos fornecedores imprime alguns deles: a Mimecast escreve –all com um travessão en, a Postmark include: spf.mtasv.net com um espaço, a Twilio SendGrid lista um mecanismo aaaa que não existe. Qualquer erro de sintaxe faz o registro inteiro virar permerror. Um ponto final depois de um domínio, por outro lado, é válido.
Dois registros SPFpermerror
v=spf1 include:_spf.google.com ~allv=spf1 include:sendgrid.net ~allCorreção: junte-os em um só: um v=spf1, cada include uma vez, um final.
Mais de 10 consultaspermerror
v=spf1 include:_netblocks.mimecast.com include:mailgun.org -all14 consultas
Correção: tire os remetentes que você não usa mais ou dê a um remetente em massa um subdomínio só dele.
Uma terceira consulta vaziapermerror
v=spf1 a:old.example.com mx:gone.example.net exists:%{i}.spf.example.org -all3 vazias
Correção: apague os termos cujos nomes sumiram e ponha os includes exists por último.
Um include sem registro SPF por tráspermerror
v=spf1 include:spf.retired-vendor.example -allCorreção: corrija o nome ou remova o fornecedor que você deixou.
Um travessão en em –allpermerror
v=spf1 include:_netblocks.mimecast.com –allImpresso assim na própria documentação da Mimecast
Correção: um hífen simples: -all.
Um espaço depois de include:permerror
v=spf1 a mx include: spf.mtasv.net ~allImpresso assim na própria documentação da Postmark
Correção: include:spf.mtasv.net
Um mecanismo aaaapermerror
v=spf1 aaaa:example.com ~allImpresso assim na própria documentação da Twilio SendGrid
Correção: a:example.com; o a já combina com os registros AAAA de remetentes IPv6.
Um ponto finalválido
v=spf1 include:spf.protection.outlook.com. -allVálido: a RFC 7208 §7.3 diz para não publicá-lo, mas os servidores de destino devem aceitá-lo.
A ajuda da Zendesk também diz “redirect: syntax is supported”: o modificador se escreve redirect= (RFC 7208 §6.1).
O que Gmail, Yahoo e Microsoft exigem
Desde fevereiro de 2024, Gmail e Yahoo exigem que todo remetente configure SPF ou DKIM. Quem envia em massa precisa dos dois, de um registro DMARC de pelo menos p=none e de um domínio no From: alinhado com um deles. O Outlook.com pede SPF e DKIM, os dois, a quem envia em alto volume, e rejeita quem não os tem desde 5 de maio de 2025.
O limite do Gmail é mais de 5.000 mensagens por dia para contas pessoais; o Yahoo não publica nenhum. O SPF sozinho nunca deixa um e-mail "alinhado": o domínio do MAIL FROM precisa ser seu, não o domínio de retorno do provedor.
| Gmail | Yahoo | Outlook.com | |
|---|---|---|---|
| Limite para envio em massa | Gmailmais de 5.000 mensagens por dia para contas pessoais do Gmail, contadas por domínio principal | Yahoonenhum publicado: “We will not specify a volume threshold” | Outlook.commais de 5.000 por dia (blog da Microsoft); 5.000 ou mais de um mesmo domínio no From: (o artigo de suporte dela) |
| Todos os remetentes | GmailSPF ou DKIM, mais DNS direto e reverso, TLS e uma taxa de spam abaixo de 0,3% | YahooSPF ou DKIM, mais DNS direto e reverso e uma taxa de spam abaixo de 0,3% | Outlook.comnenhuma regra rígida |
| Remetentes em massa | GmailSPF e DKIM, DMARC (p=none basta), From: alinhado com SPF ou DKIM, cancelamento de inscrição com um clique para e-mails de marketing | YahooSPF e DKIM, DMARC de pelo menos p=none e passando, From: alinhado com SPF ou DKIM, cancelamento de inscrição com um clique | Outlook.comO SPF precisa passar e o DKIM precisa passar, DMARC de pelo menos p=none, alinhado com SPF ou DKIM |
| Em vigor desde | Gmail1 de fevereiro de 2024; as rejeições aumentaram a partir de novembro de 2025 | Yahoofevereiro de 2024 | Outlook.com5 de maio de 2025 (rejeição) |
| A falha de SPF aparece como | Gmail4.7.275.7.27 | Yahoonão documentado para o SPF | Outlook.com550 5.7.515 |
Japão: a configuração mais rígida de NTT docomo, 「全て拒否する」, recusa e-mails cujo IP de envio o registro SPF do domínio não autoriza, e e-mails de domínios que não publicam nenhum registro SPF. docomo.ne.jp
Fontessupport.google.comsenders.yahooinc.comtechcommunity.microsoft.com
Consulta SPF vs dig e nslookup
O dig e o nslookup mostram os registros TXT como o seu resolvedor os tem: o registro SPF e o mais que houver no nome. Eles não seguem includes, não contam consultas nem consultas vazias e não dizem o que um servidor de destino decidiria.
Uma consulta SPF como esta percorre o registro inteiro, então os números batem com o que um servidor de destino calcula. Use o dig para um nome, este verificador para o veredito.
dig TXT | nslookup -type=TXT | ||
|---|---|---|---|
| Mostra os registros TXT | Este verificadorSimdivididos em termos | dig TXTSim | nslookup -type=TXTSim |
| Junta as strings de um registro longo | Este verificadorSimcomo os servidores de destino | dig TXTNãomostra cada string à parte | nslookup -type=TXTNãomostra cada string à parte |
| Segue todos os includes | Este verificadorSima árvore inteira | dig TXTNãoum nome por consulta | nslookup -type=TXTNãoum nome por consulta |
| Conta as consultas até 10 | Este verificadorSimum total corrido, por include | dig TXTNãoà mão | nslookup -type=TXTNãoà mão |
| Conta as consultas vazias | Este verificadorSimcom os nomes | dig TXTNão | nslookup -type=TXTNão |
| Diz que dois registros = permerror | Este verificadorSim | dig TXTNãoimprime os dois | nslookup -type=TXTNãoimprime os dois |
| Testa um IP de envio | Este verificadorSimcheck_host e o termo que combinou | dig TXTNão | nslookup -type=TXTNão |
| Pergunta ao seu próprio resolvedor | Este verificadorNãoGoogle Public DNS, a partir do nosso servidor | dig TXTSim | nslookup -type=TXTSim |
Verificador de SPF: perguntas frequentes
O que é verificar um registro SPF?
Como testar se um endereço IP pode enviar e-mails pelo meu domínio?
O que significa "SPF too many DNS lookups"?
O que é um permerror de SPF?
O que é uma consulta vazia (void lookup) no SPF?
Meu registro SPF deve terminar com ~all ou -all?
Um domínio pode ter dois registros SPF?
O que é SPF flattening e devo usá-lo?
Um subdomínio precisa do próprio registro SPF?
Por que o SPF passa aqui, mas falha no Gmail?
Qual é a diferença entre SPF, DKIM e DMARC?
Quanto tempo leva para uma mudança no registro SPF valer?
Sentiu falta de algo?Sugira um recurso ou uma nova ferramenta
Ferramentas de e-mail e DNS relacionadas
Consulta MX
Encontre registros MX e detalhes do servidor de e-mail
Verificador DMARC
Verifique a política DMARC e configurações de alinhamento de qualquer domínio
Verificador DKIM
Verifique registros DKIM com detecção automática de seletor
Analisador de Cabeçalho de E-mail
Analise cabeçalhos brutos de e-mail e rastreie a jornada do e-mail
Verificador de Lista Negra de IP
Verifique se um endereço IP está em listas negras de spam ou malware
DNS Reverso
Encontre hostnames associados a qualquer endereço IP via registros PTR
Consulta DNS
Todos os registros DNS direto dos servidores do domínio, ao lado do cache do Google e da Cloudflare
Gerador de registro SPF
Crie um registro SPF TXT válido para seus provedores de email e servidores, com verificação ao vivo do limite de 10 consultas DNS
