Test SPF — Vérifier un enregistrement SPF
Ce vérificateur SPF lit l'enregistrement de n'importe quel domaine comme le font les serveurs de messagerie destinataires : chaque include avec le coût de sa propre requête DNS, le total cumulé face à la limite de 10, les requêtes vides, et le résultat pour toute IP d'envoi, avec le terme qui a décidé.
Exactement le nom saisi : le SPF n'a pas d'héritage, donc mail.example.com a besoin de son propre enregistrement.
Qu'est-ce qu'un enregistrement SPF ?
Un enregistrement SPF est un enregistrement TXT qui liste les serveurs autorisés à envoyer des e-mails pour un domaine. Il commence par v=spf1, nomme les expéditeurs terme par terme, et se termine par ce que les destinataires doivent penser de tous les autres (RFC 7208, avril 2014, toujours la norme en vigueur).
Les destinataires le comparent à l'adresse du serveur qui se connecte et au domaine de l'expéditeur d'enveloppe, le MAIL FROM ou Return-Path, pas à la ligne From: qu'un lecteur voit. Relier le SPF à From:, c'est le travail de DMARC.
Un enregistrement ne couvre que le nom exact où il se trouve : le SPF n'a pas d'héritage, donc mail.example.com a besoin de son propre enregistrement. Un domaine qui n'envoie aucun e-mail devrait publier v=spf1 -all.
L'include pointe vers _spf.google.com · 8 plages, aucune requête de plus
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, en premier : un enregistrement qui commence autrement n'est pas un enregistrement SPF.redirect= confie la vérification à un autre enregistrement ; exp= explique un fail.~all. Relevé via Google Public DNS le 24 octobre 2026.Comment vérifier un enregistrement SPF
Saisissez un domaine ci-dessus : le vérificateur lit ses enregistrements TXT, retient celui qui commence par v=spf1, puis suit chaque include et chaque redirect comme le ferait un serveur destinataire, en comptant chaque requête DNS au passage.
À la main, demandez les enregistrements TXT : dig TXT example.com +short ou nslookup -type=TXT example.com. La réponse contient chaque enregistrement TXT à ce nom ; l'enregistrement SPF est celui qui commence par v=spf1, et un long enregistrement arrive en plusieurs chaînes entre guillemets que le SPF joint sans espace. Chaque include est une requête de plus, et il vous faudrait les compter vous-même.
Pour savoir si un serveur précis peut envoyer, passez à Tester une IP : le test exécute la même vérification pour cette adresse et montre le terme qui a correspondu.
dig TXT example.com +shortChaque enregistrement TXT à ce nom, tel que votre résolveur l'a ; l'enregistrement SPF est celui qui commence par v=spf1. Relancez la commande pour chaque 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" # puis chaque include, une requête à la fois : $ dig +short TXT _spf.salesforce.com "v=spf1 exists:%{i}._spf.mta.salesforce.com -all"
- Un enregistrement commence par v=spf1. Les 23 autres enregistrements TXT à côté (jetons de vérification et autres) n'ont pas d'importance pour le SPF, sauf pour la taille de la réponse.
- 2 chaînes, jointes sans espace. La coupure à 255 octets tombe dans
ip4:62.253.227.114: les destinataires rejoignent les chaînes, donc ce n'est pas un problème. - TTL 5 minutes. La durée pendant laquelle les résolveurs peuvent garder cette copie après un changement. Le serveur de la zone indique 5 minutes ; un résolveur montre ce qui reste de sa copie.
- Chaque include est sa propre requête. Suivre l'enregistrement de github.com demande 10 requêtes, imbriqués compris. dig montre un nom à la fois : le décompte jusqu'à 10 est à faire vous-même.
$ nslookup -type=TXT github.com 8.8.8.8
# chaque enregistrement TXT à ce nom, depuis Google Public DNS PS> Resolve-DnsName -Name github.com -Type TXT -Server 8.8.8.8
Lire le résultat : l'arbre des includes
Le verdict dit ce que les destinataires obtiennent pour un expéditeur que l'enregistrement ne liste pas : valide avec sa terminaison (softfail pour ~all, fail pour -all), ou un permerror avec sa cause, ou « vérification impossible » quand le DNS n'a pas répondu.
La colonne marine est le budget de requêtes : une cellule par requête DNS, colorée selon l'include qui la dépense, le total cumulé face à 10, et les requêtes vides en anneaux. Après la 10e, les cellules deviennent rouges et la branche où les destinataires s'arrêtent est marquée.
La vue Arbre liste les constats, échecs en premier, chacun avec sa section de RFC et la correction, puis chaque requête dans l'ordre où un destinataire la pose.

Le verdictCe que les destinataires obtiennent pour un expéditeur que l'enregistrement ne liste pas, et la terminaison qui en décide.L'enregistrement, terme par termeChaque terme coloré selon son type ; un include porte la marque de son propriétaire et son propre coût en requêtes.Les constatsUn enregistrement, syntaxe valide, requêtes, requêtes vides, la terminaison, ptr, DMARC : échecs en premier, chacun avec sa correction.Le budget de requêtesChaque requête DNS en cellule, colorée selon l'include qui la dépense, face à la limite de 10.Le coût de chaque includeUne branche par include : ses propres cellules, ce qu'il imbrique et le total cumulé.Les requêtes videsDes anneaux pour les requêtes revenues vides ; la troisième met fin à la vérification.La limite de 10 requêtes et « too many DNS lookups » (permerror)
Les destinataires comptent chaque terme qui exige une requête DNS, include, a, mx, ptr, exists et redirect, à travers chaque include imbriqué, et s'arrêtent à 10. La 11e donne permerror (RFC 7208 §4.6.4). ip4, ip6, all et exp ne coûtent rien.
C'est un permerror, pas un fail : ce qu'un destinataire en fait est son propre choix, mais sous DMARC un permerror ne compte jamais comme un pass. Et comme la vérification s'arrête à la première correspondance, un enregistrement au-delà de la limite passe encore pour les expéditeurs listés tôt et ne casse que pour ceux listés tard.
Le coût se cache dans les includes : include:_netblocks.mimecast.com en dépense 9 à lui seul, celui de Yandex 360 en dépense 8, celui de Freshdesk 7, celui de Mailgun 5. Les includes de Google et de Microsoft 365 coûtent 1 chacun. Pour passer sous 10, retirez les expéditeurs que vous n'utilisez plus et déplacez un expéditeur en masse vers un sous-domaine avec son propre enregistrement.
v=spf1 include:spf.protection.outlook.com include:_netblocks.mimecast.com include:mailgun.org include:sendgrid.net -all
Tous les autres obtiennent aussi permerror, pas le fail du -all de l'enregistrement : les destinataires s'arrêtent avant de l'atteindre.
- _netblocks.mimecast.comMimecast9 requêtes
- _spf.yandex.netYandex 3608 requêtes
- email.freshdesk.comFreshdesk7 requêtes
- mailgun.orgMailgun5 requêtes
- icloud.comiCloud+5 requêtes
- spf.titan.emailTitan Email4 requêtes
- secureserver.netGoDaddy3 requêtes
- _spf.google.comGoogle Workspace1 requête
- spf.protection.outlook.comMicrosoft 3651 requête
Que sont les requêtes vides (void lookups) ?
Une requête vide est une requête qui revient sans aucun enregistrement : le nom n'existe pas (NXDOMAIN) ou existe sans l'enregistrement demandé. Les destinataires doivent en tolérer deux ; la troisième est permerror (RFC 7208 §4.6.4).
Un terme qui pointe vers un hôte disparu, a:old.example.com, n'est pas une erreur en soi : il ne correspond simplement pas et compte une requête vide. Il en va de même pour exists:%{i}._spf.mta.salesforce.com pour chaque expéditeur que Salesforce ne liste pas, ce qui explique pourquoi l'ordre des includes compte.
Une panne de serveur ou un délai dépassé n'est pas une requête vide : c'est un temperror, et les destinataires réessaient généralement plus tard.
L'enregistrement propre de salesforce.com pour 192.0.2.1, relevé le 24 octobre 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 · requête 3 · dans _spf.salesforce.comexists:%{i}._spf.corp.salesforce.com192.0.2.1._spf.corp.salesforce.com → NXDOMAIN · requête 4 · dans salesforce.com
Résultat : softfail, les deux requêtes vides permises étant dépensées
a:mail.example.com pour un nom toujours présent mais sans adresse : NOERROR sans réponse. Pas de correspondance, une requête vide, et la vérification continue.NODATAvideexists:%{i}._spf.mta.salesforce.com construit un nom à partir de chaque IP d'envoi ; pour une adresse que Salesforce ne liste pas, la réponse est NXDOMAIN : une requête vide à chaque fois.NXDOMAINvidemx:shop.example.com, un nom disparu, après 2 requêtes vides déjà : les destinataires s'arrêtent ici.NXDOMAINpermerrorinclude:_spf.vendor.example : le DNS est en panne, donc rien ne compte comme vide.SERVFAILtemperror, pas une requête videL'include include:spf.bmv.jp de blastmail commence par deux termes exists de ce genre : pour une adresse qu'il ne liste pas, il dépense à lui seul les deux requêtes vides permises.
L'aplatissement SPF : quand il aide et quand il casse
Aplatir remplace un include par les adresses qu'il liste, pour que l'enregistrement coûte moins de requêtes. Cela marche pour des plages qui changent rarement, et se retourne contre vous quand un fournisseur ajoute un serveur que vous n'avez pas copié : ses e-mails échouent alors au SPF.
Microsoft déconseille d'aplatir include:spf.protection.outlook.com, et les includes de Google et de Microsoft coûtent déjà une requête chacun. Déplacer un expéditeur en masse vers un sous-domaine comme news.example.com lui donne un enregistrement, et 10 requêtes, à lui.
Avant
include:mailgun.org
- Requêtes
- 5
- Enregistrements récupérés
- 5
- Octets dans votre enregistrement
- 19
- Mailgun change une plage
- pris en compte aussitôt
Après
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 de plus
- Requêtes
- 0
- Octets dans votre enregistrement
- 450
- Chaînes TXT nécessaires
- 2
- Mailgun change une plage
- votre copie est périmée
Le risque de la copie périmée. Vous copiez 22 plages aujourd'hui ; quand Mailgun en ajoute une, ses e-mails échouent au SPF jusqu'à ce que quelqu'un s'en aperçoive et mette l'enregistrement à jour.
- copié
- Mailgun ajoute une plage
- ses e-mails échouent au SPF
~all ou -all (et DMARC)
Le dernier terme dit ce qui arrive à tout expéditeur non listé. -all est fail, la déclaration la plus forte ; ~all est softfail, « probablement pas » ; ?all est neutral, que les destinataires traitent comme l'absence de SPF ; +all laisse tout le monde passer et ne devrait jamais être publié.
Entre ~all et -all, il n'y a pas de mauvaise réponse. Google documente ~all pour Google Workspace et Microsoft -all pour Microsoft 365. Avec DMARC en application, ~all laisse DMARC trancher sur DKIM : certains destinataires rejettent sur -all avant que DMARC voie une signature DKIM valide, donc un e-mail transféré peut rebondir (RFC 9989 §7.1).
~all-all?all?all : sans conséquence là, puisque seul un pass dans un include correspond.+all-all avec DMARC à p=reject
- SPF : fail
- rejeté en SMTP
- DKIM jamais vérifié
Certains destinataires agissent d'abord sur le SPF : un message transféré avec une signature DKIM valide peut donc être refusé avant que DMARC s'exécute, et la perte n'apparaît jamais dans les rapports DMARC.
~all avec DMARC à p=reject
- SPF : softfail
- DMARC vérifie DKIM
- DKIM aligné : pass
DMARC décide. Sans signature DKIM, cependant, Microsoft dit que DMARC est en pratique ignoré pour les échecs ~all, et recommande -all pour cette raison.
~all comme -all sont des choix valables ; ?all ne dit rien, et +all laisse n'importe qui passer.Erreurs SPF courantes et comment les corriger
La plupart des enregistrements cassés viennent de trois erreurs : un second enregistrement SPF ajouté à côté du premier au lieu de les fusionner, un include pour un fournisseur disparu depuis, et une valeur copiée depuis une documentation avec une faute de frappe.
La documentation des fournisseurs imprime elle-même certaines de ces erreurs : Mimecast écrit –all avec un tiret demi-cadratin, Postmark include: spf.mtasv.net avec une espace, Twilio SendGrid liste un mécanisme aaaa qui n'existe pas. Toute erreur de syntaxe rend tout l'enregistrement permerror. Un point final après un domaine, en revanche, est valide.
Deux enregistrements SPFpermerror
v=spf1 include:_spf.google.com ~allv=spf1 include:sendgrid.net ~allCorrection : fusionnez-les en un seul : un v=spf1, chaque include une fois, une terminaison.
Plus de 10 requêtespermerror
v=spf1 include:_netblocks.mimecast.com include:mailgun.org -all14 requêtes
Correction : retirez les expéditeurs que vous n'utilisez plus, ou donnez à un expéditeur en masse son propre sous-domaine.
Une troisième requête videpermerror
v=spf1 a:old.example.com mx:gone.example.net exists:%{i}.spf.example.org -all3 vides
Correction : supprimez les termes dont les noms ont disparu, et placez les includes exists en dernier.
Un include sans enregistrement SPF derrièrepermerror
v=spf1 include:spf.retired-vendor.example -allCorrection : corrigez le nom, ou retirez le fournisseur que vous avez quitté.
Un tiret demi-cadratin dans –allpermerror
v=spf1 include:_netblocks.mimecast.com –allImprimé ainsi dans la documentation de Mimecast
Correction : un trait d'union simple : -all.
Une espace après include:permerror
v=spf1 a mx include: spf.mtasv.net ~allImprimé ainsi dans la documentation de Postmark
Correction : include:spf.mtasv.net
Un mécanisme aaaapermerror
v=spf1 aaaa:example.com ~allImprimé ainsi dans la documentation de Twilio SendGrid
Correction : a:example.com ; a correspond déjà aux enregistrements AAAA des expéditeurs IPv6.
Un point finalvalide
v=spf1 include:spf.protection.outlook.com. -allValide : la RFC 7208 §7.3 dit de ne pas le publier, mais les destinataires doivent l'accepter.
L'aide de Zendesk dit aussi « redirect: syntax is supported » : le modificateur s'écrit redirect= (RFC 7208 §6.1).
Ce que Gmail, Yahoo et Microsoft exigent
Depuis février 2024, Gmail et Yahoo exigent de chaque expéditeur qu'il configure SPF ou DKIM. Les expéditeurs en masse ont besoin des deux, d'un enregistrement DMARC d'au moins p=none, et d'un domaine From: aligné avec l'un d'eux. Outlook.com demande aux expéditeurs à fort volume SPF et DKIM à la fois, et rejette ceux qui n'ont pas les deux depuis le 5 mai 2025.
Le seuil de Gmail est de plus de 5 000 messages par jour vers des comptes personnels ; Yahoo n'en publie aucun. Le SPF seul ne rend jamais un e-mail « aligné » : le domaine de MAIL FROM doit être le vôtre, pas le domaine de rebond du fournisseur.
| Gmail | Yahoo | Outlook.com | |
|---|---|---|---|
| Seuil en masse | Gmailplus de 5 000 messages par jour vers des comptes Gmail personnels, comptés par domaine principal | Yahooaucun publié : « We will not specify a volume threshold » | Outlook.complus de 5 000 par jour (blog de Microsoft) ; 5 000 ou plus depuis un même domaine From: (son article d'assistance) |
| Tous les expéditeurs | GmailSPF ou DKIM, plus DNS direct et inverse, TLS et un taux de spam inférieur à 0,3 % | YahooSPF ou DKIM, plus DNS direct et inverse et un taux de spam inférieur à 0,3 % | Outlook.comaucune règle stricte |
| Expéditeurs en masse | GmailSPF et DKIM, DMARC (p=none suffit), From: aligné avec SPF ou DKIM, désabonnement en un clic pour les e-mails marketing | YahooSPF et DKIM, DMARC au moins p=none et réussi, From: aligné avec SPF ou DKIM, désabonnement en un clic | Outlook.comSPF doit passer et DKIM doit passer, DMARC au moins p=none, aligné avec SPF ou DKIM |
| En vigueur depuis | Gmail1 février 2024 ; rejets intensifiés à partir de novembre 2025 | Yahoofévrier 2024 | Outlook.com5 mai 2025 (rejet) |
| L'échec SPF s'affiche comme | Gmail4.7.275.7.27 | Yahoonon documenté pour le SPF | Outlook.com550 5.7.515 |
Japon : le réglage le plus strict de NTT docomo, 「全て拒否する」, refuse les e-mails dont l'IP d'envoi n'est pas autorisée par l'enregistrement SPF du domaine, et ceux des domaines qui ne publient aucun enregistrement SPF. docomo.ne.jp
Sourcessupport.google.comsenders.yahooinc.comtechcommunity.microsoft.com
Recherche SPF, dig et nslookup
dig et nslookup montrent les enregistrements TXT tels que votre résolveur les a : l'enregistrement SPF et tout ce qui se trouve d'autre à ce nom. Ils ne suivent pas les includes, ne comptent ni les requêtes ni les requêtes vides, et ne disent pas ce que déciderait un destinataire.
Une recherche SPF comme celle-ci parcourt tout l'enregistrement, donc les chiffres correspondent à ce que calcule un serveur destinataire. Utilisez dig pour un nom, ce vérificateur pour le verdict.
dig TXT | nslookup -type=TXT | ||
|---|---|---|---|
| Montre les enregistrements TXT | Ce vérificateurOuidécoupés en termes | dig TXTOui | nslookup -type=TXTOui |
| Joint les chaînes d'un long enregistrement | Ce vérificateurOuicomme les destinataires | dig TXTNonmontre chaque chaîne à part | nslookup -type=TXTNonmontre chaque chaîne à part |
| Suit chaque include | Ce vérificateurOuitout l'arbre | dig TXTNonun nom par requête | nslookup -type=TXTNonun nom par requête |
| Compte les requêtes jusqu'à 10 | Ce vérificateurOuiun total cumulé, par include | dig TXTNonà la main | nslookup -type=TXTNonà la main |
| Compte les requêtes vides | Ce vérificateurOuiavec les noms | dig TXTNon | nslookup -type=TXTNon |
| Dit que deux enregistrements = permerror | Ce vérificateurOui | dig TXTNonaffiche les deux | nslookup -type=TXTNonaffiche les deux |
| Teste une IP d'envoi | Ce vérificateurOuicheck_host et le terme qui correspond | dig TXTNon | nslookup -type=TXTNon |
| Interroge votre propre résolveur | Ce vérificateurNonGoogle Public DNS, depuis notre serveur | dig TXTOui | nslookup -type=TXTOui |
Vérificateur SPF : questions fréquentes
Qu'est-ce qu'une vérification d'enregistrement SPF ?
Comment tester si une adresse IP est autorisée à envoyer des e-mails pour mon domaine ?
Que signifie « SPF too many DNS lookups » ?
Qu'est-ce qu'un permerror SPF ?
Qu'est-ce qu'une requête vide (void lookup) en SPF ?
Mon enregistrement SPF doit-il se terminer par ~all ou -all ?
Un domaine peut-il avoir deux enregistrements SPF ?
Qu'est-ce que l'aplatissement SPF, et faut-il l'utiliser ?
Un sous-domaine a-t-il besoin de son propre enregistrement SPF ?
Pourquoi le SPF passe ici mais échoue chez Gmail ?
Quelle est la différence entre SPF, DKIM et DMARC ?
Combien de temps faut-il pour qu'un changement d'enregistrement SPF fasse effet ?
Il vous manque quelque chose ?Suggérez une fonction ou un nouvel outil
Outils e-mail et DNS associés
Recherche MX
Trouvez les enregistrements MX et les détails du serveur de messagerie
Vérification DMARC
Vérifiez la politique DMARC et les paramètres d'alignement de n'importe quel domaine
Vérifier DKIM
Vérifiez les enregistrements DKIM avec détection automatique de sélecteur
Analyseur d'En-têtes E-mail
Analysez les en-têtes bruts d'e-mail et tracez le parcours de l'e-mail
Vérification de Liste Noire IP
Vérifiez si une adresse IP est sur des listes noires de spam ou de malware
DNS Inversé
Trouvez les hostnames associés à n'importe quelle adresse IP via les enregistrements PTR
Recherche DNS
Tous les enregistrements DNS depuis les serveurs du domaine, à côté du cache de Google et Cloudflare
Générateur d'enregistrement SPF
Créez un enregistrement SPF TXT valide pour vos services email et vos serveurs, avec un contrôle en direct de la limite de 10 requêtes DNS
