SPF-Check — SPF-Eintrag prüfen
Der SPF-Check liest den SPF-Eintrag jeder Domain so, wie es empfangende Mailserver tun: jeden include mit seinen eigenen DNS-Lookup-Kosten, die laufende Summe gegen das Limit von 10, Void-Lookups und das Ergebnis für jede sendende IP, samt dem Term, der entschieden hat.
Genau der Name, den Sie eingeben: SPF kennt keine Vererbung, daher braucht mail.example.com einen eigenen Eintrag.
Was ist ein SPF-Eintrag?
Ein SPF-Eintrag ist ein TXT-Eintrag, der die Server auflistet, die für eine Domain Mails senden dürfen. Er beginnt mit v=spf1, nennt dann Term für Term die Absender und endet damit, was Empfänger von allen anderen halten sollen (RFC 7208, April 2014, weiterhin der gültige Standard).
Empfänger prüfen ihn gegen die Adresse des Servers, der sich verbindet, und die Domain im Envelope-Absender, dem MAIL FROM oder Return-Path, nicht gegen die From:-Zeile, die ein Leser sieht. SPF mit From: zu verknüpfen ist Aufgabe von DMARC.
Ein Eintrag deckt nur genau den Namen ab, bei dem er steht: SPF kennt keine Vererbung, daher braucht mail.example.com einen eigenen Eintrag. Eine Domain, die keine Mails sendet, sollte v=spf1 -all veröffentlichen.
Der include zeigt auf _spf.google.com · 8 Bereiche, keine weiteren Lookups
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, an erster Stelle: Ein Eintrag, der anders beginnt, ist kein SPF-Eintrag.redirect= übergibt die Prüfung an einen anderen Eintrag; exp= erklärt ein fail.~all. Aufgezeichnet über Google Public DNS am 24. Oktober 2026.SPF-Eintrag prüfen: So geht's
Geben Sie oben eine Domain ein, und der SPF-Check liest ihre TXT-Einträge, wählt den aus, der mit v=spf1 beginnt, und folgt dann jedem include und redirect, so wie es ein empfangender Server tut, wobei er jeden DNS-Lookup mitzählt.
Von Hand fragen Sie die TXT-Einträge ab: dig TXT example.com +short oder nslookup -type=TXT example.com. Die Antwort enthält jeden TXT-Eintrag beim Namen; der SPF-Eintrag ist der, der mit v=spf1 beginnt, und ein langer kommt als mehrere Strings in Anführungszeichen, die SPF ohne Leerzeichen zusammenfügt. Jeder include ist eine weitere Abfrage, und Sie müssten sie selbst zählen.
Um zu sehen, ob ein bestimmter Server senden darf, wechseln Sie zu IP testen: Es führt dieselbe Prüfung für diese Adresse aus und zeigt den Term, der gegriffen hat.
dig TXT example.com +shortJeder TXT-Eintrag beim Namen, so wie Ihr Resolver ihn hat; der SPF-Eintrag ist der, der mit v=spf1 beginnt. Führen Sie es für jeden include erneut aus.
$ 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" # dann jeder include, eine Abfrage nach der anderen: $ dig +short TXT _spf.salesforce.com "v=spf1 exists:%{i}._spf.mta.salesforce.com -all"
- Ein Eintrag beginnt mit v=spf1. Daneben stehen 23 weitere TXT-Einträge (Verifizierungs-Token und Ähnliches): Das zählt für SPF nicht, nur für die Größe der Antwort.
- 2 Strings, ohne Leerzeichen zusammengefügt. Die Teilung bei 255 Bytes fällt in
ip4:62.253.227.114: Empfänger fügen die Strings wieder zusammen, das ist also in Ordnung. - TTL 5 Minuten. Wie lange Resolver diese Kopie nach einer Änderung behalten dürfen. Der eigene Server der Zone nennt 5 Minuten; ein Resolver zeigt, was von seiner Kopie übrig ist.
- Jeder include ist eine eigene Abfrage. Dem Eintrag von github.com zu folgen, braucht 10 Lookups, verschachtelte eingeschlossen. dig zeigt immer einen Namen: Die Zählung bis 10 müssen Sie selbst addieren.
$ nslookup -type=TXT github.com 8.8.8.8
# jeder TXT-Eintrag beim Namen, von Google Public DNS PS> Resolve-DnsName -Name github.com -Type TXT -Server 8.8.8.8
Das Ergebnis lesen: der include-Baum
Der Befund sagt, was Empfänger für einen Absender erhalten, den der Eintrag nicht listet: gültig mit seinem Abschluss (softfail bei ~all, fail bei -all), oder ein permerror mit seiner Ursache, oder „nicht prüfbar“, wenn DNS nicht geantwortet hat.
Die dunkelblaue Spalte ist das Lookup-Budget: eine Zelle pro DNS-Lookup, eingefärbt nach dem include, der ihn verbraucht, die laufende Summe gegen 10 und Void-Lookups als Ringe. Ab dem 10. werden die Zellen rot, und der Zweig, an dem Empfänger abbrechen, ist markiert.
Die Baumansicht listet die Befunde auf, Fehler zuerst, jeder mit seinem RFC-Abschnitt und der Lösung, dann jeden Lookup in der Reihenfolge, in der ein Empfänger fragt.

Der BefundWas Empfänger für einen Absender erhalten, den der Eintrag nicht listet, und der Abschluss, der es entscheidet.Der Eintrag, Term für TermJeder Term nach Art eingefärbt; ein include trägt das Zeichen seines Inhabers und seine eigenen Lookup-Kosten.Die BefundeEin Eintrag, gültige Syntax, Lookups, Voids, der Abschluss, ptr, DMARC: Fehler zuerst, jeder mit seiner Lösung.Das Lookup-BudgetJeder DNS-Lookup als Zelle, eingefärbt nach dem include, der ihn verbraucht, gegen das Limit von 10.Die Kosten jedes includeEin Zweig pro include: seine eigenen Zellen, was er verschachtelt und die laufende Summe.Die Void-LookupsRinge für Abfragen, die leer zurückkamen; die dritte beendet die Prüfung.Das 10-Lookup-Limit und „too many DNS lookups“ (permerror)
Empfänger zählen jeden Term, der eine DNS-Abfrage braucht, include, a, mx, ptr, exists und redirect, durch jeden verschachtelten include, und hören bei 10 auf. Der 11. ergibt permerror (RFC 7208 §4.6.4). ip4, ip6, all und exp kosten nichts.
Es ist ein permerror, kein fail: Was ein Empfänger damit macht, entscheidet er selbst, aber unter DMARC zählt ein permerror nie als Pass. Und weil die Prüfung beim ersten Treffer endet, besteht ein Eintrag über dem Limit für früh gelistete Absender weiterhin und bricht nur für spät gelistete.
Die Kosten verstecken sich in den includes: include:_netblocks.mimecast.com verbraucht allein 9, der von Yandex 360 8, der von Freshdesk 7, der von Mailgun 5. Die includes von Google und Microsoft 365 kosten je 1. Um unter 10 zu kommen, streichen Sie Absender, die Sie nicht mehr nutzen, und verlegen Sie einen Massenversender auf eine Subdomain mit eigenem Eintrag.
v=spf1 include:spf.protection.outlook.com include:_netblocks.mimecast.com include:mailgun.org include:sendgrid.net -all
Alle anderen erhalten ebenfalls permerror, nicht das fail von -all im Eintrag: Empfänger brechen ab, bevor sie es erreichen.
- _netblocks.mimecast.comMimecast9 Lookups
- _spf.yandex.netYandex 3608 Lookups
- email.freshdesk.comFreshdesk7 Lookups
- mailgun.orgMailgun5 Lookups
- icloud.comiCloud+5 Lookups
- spf.titan.emailTitan Email4 Lookups
- secureserver.netGoDaddy3 Lookups
- _spf.google.comGoogle Workspace1 Lookup
- spf.protection.outlook.comMicrosoft 3651 Lookup
Was sind Void-Lookups?
Ein Void-Lookup ist eine Abfrage, die ohne Einträge zurückkommt: Der Name existiert nicht (NXDOMAIN) oder existiert ohne den abgefragten Eintrag. Empfänger sollten zwei zulassen; der dritte ist permerror (RFC 7208 §4.6.4).
Ein Term, der auf einen nicht mehr vorhandenen Host zeigt, a:old.example.com, ist für sich kein Fehler: Er greift nur nicht und zählt einen Void. Dasselbe gilt für exists:%{i}._spf.mta.salesforce.com bei jedem Absender, den Salesforce nicht listet, weshalb die Reihenfolge der includes zählt.
Ein Serverfehler oder eine Zeitüberschreitung ist kein Void: Es ist ein temperror, und Empfänger versuchen es meist später erneut.
Der eigene Eintrag von salesforce.com für 192.0.2.1, aufgezeichnet am 24. Oktober 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 · Lookup 3 · in _spf.salesforce.comexists:%{i}._spf.corp.salesforce.com192.0.2.1._spf.corp.salesforce.com → NXDOMAIN · Lookup 4 · in salesforce.com
Ergebnis: softfail, beide erlaubten Voids verbraucht
a:mail.example.com für einen Namen, der noch da ist, aber keine Adresse mehr hat: NOERROR ohne Antwort. Kein Treffer, ein Void, und die Prüfung geht weiter.NODATAVoidexists:%{i}._spf.mta.salesforce.com bildet aus jeder sendenden IP einen Namen; für eine Adresse, die Salesforce nicht listet, lautet die Antwort NXDOMAIN: jedes Mal ein Void.NXDOMAINVoidmx:shop.example.com, ein Name, den es nicht mehr gibt, nachdem bereits 2 Voids verbraucht sind: Empfänger brechen hier ab.NXDOMAINpermerrorinclude:_spf.vendor.example: DNS ist ausgefallen, daher zählt nichts als Void.SERVFAILtemperror, kein VoidDer include include:spf.bmv.jp von blastmail beginnt mit zwei solchen exists-Termen: Für eine Adresse, die er nicht listet, verbraucht er beide erlaubten Voids allein.
SPF-Flattening: wann es hilft und wann es bricht
Flattening ersetzt einen include durch die Adressen, die er listet, damit der Eintrag weniger Lookups kostet. Das funktioniert für Bereiche, die sich selten ändern, und schlägt fehl, wenn ein Anbieter einen Server ergänzt, den Sie nie kopiert haben: Mails davon fallen dann bei SPF durch.
Microsoft sagt, include:spf.protection.outlook.com nicht zu flatten, und die includes von Google und Microsoft kosten ohnehin je einen Lookup. Einen Massenversender auf eine Subdomain wie news.example.com zu verlegen, gibt ihm einen eigenen Eintrag und eigene 10 Lookups.
Vorher
include:mailgun.org
- Lookups
- 5
- Abgerufene Einträge
- 5
- Bytes in Ihrem Eintrag
- 19
- Mailgun ändert einen Bereich
- sofort übernommen
Nachher
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 weitere
- Lookups
- 0
- Bytes in Ihrem Eintrag
- 450
- Nötige TXT-Strings
- 2
- Mailgun ändert einen Bereich
- Ihre Kopie ist veraltet
Das Risiko der veralteten Kopie. Sie kopieren heute 22 Bereiche; ergänzt Mailgun einen, fallen Mails davon bei SPF durch, bis jemand es bemerkt und den Eintrag aktualisiert.
- kopiert
- Mailgun ergänzt einen Bereich
- Mails davon fallen bei SPF durch
~all vs -all (und DMARC)
Der letzte Term sagt, was mit jedem nicht gelisteten Absender geschieht. -all ist fail, die stärkste Aussage; ~all ist softfail, „wahrscheinlich nicht“; ?all ist neutral, was Empfänger wie gar kein SPF behandeln; +all lässt jeden bestehen und sollte nie veröffentlicht werden.
Zwischen ~all und -all gibt es keine falsche Antwort. Google dokumentiert ~all für Google Workspace und Microsoft -all für Microsoft 365. Mit DMARC im Enforcement lässt ~all DMARC anhand von DKIM entscheiden: Manche Empfänger lehnen bei -all ab, bevor DMARC eine bestandene DKIM-Signatur sieht, daher können weitergeleitete Mails zurückkommen (RFC 9989 §7.1).
~all-all?all?all: dort harmlos, da nur ein Pass in einem include greift.+all-all mit DMARC bei p=reject
- SPF: fail
- in SMTP abgelehnt
- DKIM nie geprüft
Manche Empfänger handeln zuerst nach SPF, daher kann eine weitergeleitete Nachricht mit gültiger DKIM-Signatur abgelehnt werden, bevor DMARC läuft, und der Verlust zeigt sich nie in DMARC-Berichten.
~all mit DMARC bei p=reject
- SPF: softfail
- DMARC prüft DKIM
- DKIM passt: pass
DMARC entscheidet. Ohne DKIM-Signatur wird DMARC laut Microsoft bei ~all-Fehlschlägen jedoch faktisch ignoriert, und Microsoft empfiehlt deshalb -all.
~all und -all sind beide gültige Entscheidungen; ?all sagt nichts, und +all lässt jeden bestehen.Häufige SPF-Fehler und ihre Lösung
Die meisten defekten Einträge entstehen durch drei Fehler: einen zweiten SPF-Eintrag neben dem ersten, statt sie zusammenzuführen, einen include für einen Anbieter, den es nicht mehr gibt, und einen aus der Doku kopierten Wert mit einem Tippfehler.
Anbieter-Dokus drucken manche davon selbst: Mimecast schreibt –all mit Halbgeviertstrich, Postmark include: spf.mtasv.net mit Leerzeichen, Twilio SendGrid führt einen aaaa-Mechanismus auf, den es nicht gibt. Jeder Syntaxfehler macht den ganzen Eintrag zum permerror. Ein abschließender Punkt hinter einer Domain ist dagegen gültig.
Zwei SPF-Einträgepermerror
v=spf1 include:_spf.google.com ~allv=spf1 include:sendgrid.net ~allLösung: zu einem zusammenführen: ein v=spf1, jeder include einmal, ein Abschluss.
Mehr als 10 Lookupspermerror
v=spf1 include:_netblocks.mimecast.com include:mailgun.org -all14 Lookups
Lösung: Absender streichen, die Sie nicht mehr nutzen, oder einem Massenversender eine eigene Subdomain geben.
Ein dritter Void-Lookuppermerror
v=spf1 a:old.example.com mx:gone.example.net exists:%{i}.spf.example.org -all3 Voids
Lösung: Terme löschen, deren Namen es nicht mehr gibt, und exists-includes ans Ende setzen.
Ein include ohne SPF-Eintrag dahinterpermerror
v=spf1 include:spf.retired-vendor.example -allLösung: den Namen korrigieren oder den Anbieter entfernen, den Sie verlassen haben.
Ein Halbgeviertstrich in –allpermerror
v=spf1 include:_netblocks.mimecast.com –allSo gedruckt in der eigenen Dokumentation von Mimecast
Lösung: ein einfacher Bindestrich: -all.
Ein Leerzeichen nach include:permerror
v=spf1 a mx include: spf.mtasv.net ~allSo gedruckt in der eigenen Dokumentation von Postmark
Lösung: include:spf.mtasv.net
Ein aaaa-Mechanismuspermerror
v=spf1 aaaa:example.com ~allSo gedruckt in der eigenen Dokumentation von Twilio SendGrid
Lösung: a:example.com; a greift bereits auf die AAAA-Einträge von IPv6-Absendern.
Ein abschließender Punktgültig
v=spf1 include:spf.protection.outlook.com. -allGültig: RFC 7208 §7.3 sagt, ihn nicht zu veröffentlichen, aber Empfänger müssen ihn akzeptieren.
Die Hilfe von Zendesk sagt außerdem „redirect: syntax is supported“: Der Modifier wird redirect= geschrieben (RFC 7208 §6.1).
Was Gmail, Yahoo und Microsoft verlangen
Seit Februar 2024 verlangen Gmail und Yahoo von jedem Absender, SPF oder DKIM einzurichten. Massenversender brauchen beides, einen DMARC-Eintrag von mindestens p=none und eine From:-Domain, die zu einem von beiden passt. Outlook.com verlangt von Absendern mit hohem Volumen SPF und DKIM beide und lehnt solche ohne sie seit dem 5. Mai 2025 ab.
Die Schwelle von Gmail liegt bei mehr als 5.000 Nachrichten pro Tag an persönliche Konten; Yahoo veröffentlicht keine. SPF allein macht Mails nie „aligned“: Die MAIL-FROM-Domain muss Ihre sein, nicht die Bounce-Domain des Anbieters.
| Gmail | Yahoo | Outlook.com | |
|---|---|---|---|
| Schwelle für Massenversand | Gmailmehr als 5.000 Nachrichten pro Tag an persönliche Gmail-Konten, pro Primärdomain gezählt | Yahookeine veröffentlicht: „We will not specify a volume threshold“ | Outlook.commehr als 5.000 pro Tag (Microsofts Blog); 5.000 oder mehr von einer From:-Domain (sein Support-Artikel) |
| Alle Absender | GmailSPF oder DKIM, dazu Forward- und Reverse-DNS, TLS und eine Spam-Rate unter 0,3 % | YahooSPF oder DKIM, dazu Forward- und Reverse-DNS und eine Spam-Rate unter 0,3 % | Outlook.comkeine feste Regel |
| Massenversender | GmailSPF und DKIM, DMARC (p=none genügt), From: passend zu SPF oder DKIM, Abmeldung mit einem Klick für Marketing-Mails | YahooSPF und DKIM, DMARC mindestens p=none und bestanden, From: passend zu SPF oder DKIM, Abmeldung mit einem Klick | Outlook.comSPF muss bestehen und DKIM muss bestehen, DMARC mindestens p=none, passend zu SPF oder DKIM |
| In Kraft seit | Gmail1. Februar 2024; Ablehnungen ab November 2025 verstärkt | YahooFebruar 2024 | Outlook.com5. Mai 2025 (Ablehnung) |
| SPF-Fehlschlag zeigt sich als | Gmail4.7.275.7.27 | Yahoofür SPF nicht dokumentiert | Outlook.com550 5.7.515 |
Japan: Die strengste Einstellung von NTT docomo, 「全て拒否する」, weist Mails ab, deren sendende IP der SPF-Eintrag der Domain nicht autorisiert, und Mails von Domains, die gar keinen SPF-Eintrag veröffentlichen. docomo.ne.jp
Quellensupport.google.comsenders.yahooinc.comtechcommunity.microsoft.com
SPF-Lookup vs. dig und nslookup
dig und nslookup zeigen die TXT-Einträge, wie Ihr Resolver sie hat: den SPF-Eintrag und alles andere, was beim Namen steht. Sie folgen keinen includes, zählen keine Lookups oder Voids und sagen nicht, was ein Empfänger entscheiden würde.
Ein SPF-Lookup wie dieser durchläuft den ganzen Eintrag, daher stimmen die Zahlen mit dem überein, was ein empfangender Server berechnet. Nutzen Sie dig für einen Namen, diesen Checker für den Befund.
dig TXT | nslookup -type=TXT | ||
|---|---|---|---|
| Zeigt die TXT-Einträge | Dieser CheckerJain Terme zerlegt | dig TXTJa | nslookup -type=TXTJa |
| Fügt die Strings eines langen Eintrags zusammen | Dieser CheckerJawie Empfänger | dig TXTNeinzeigt jeden String einzeln | nslookup -type=TXTNeinzeigt jeden String einzeln |
| Folgt jedem include | Dieser CheckerJader ganze Baum | dig TXTNeinein Name pro Abfrage | nslookup -type=TXTNeinein Name pro Abfrage |
| Zählt Lookups bis 10 | Dieser CheckerJaeine laufende Summe, pro include | dig TXTNeinvon Hand | nslookup -type=TXTNeinvon Hand |
| Zählt Void-Lookups | Dieser CheckerJamit den Namen | dig TXTNein | nslookup -type=TXTNein |
| Sagt: zwei Einträge = permerror | Dieser CheckerJa | dig TXTNeingibt beide aus | nslookup -type=TXTNeingibt beide aus |
| Testet eine sendende IP | Dieser CheckerJacheck_host und der passende Term | dig TXTNein | nslookup -type=TXTNein |
| Fragt Ihren eigenen Resolver | Dieser CheckerNeinGoogle Public DNS, von unserem Server | dig TXTJa | nslookup -type=TXTJa |
SPF-Check: häufige Fragen
Was ist ein SPF-Check?
Wie teste ich, ob eine IP-Adresse E-Mails für meine Domain senden darf?
Was bedeutet „SPF too many DNS lookups“?
Was ist ein SPF-permerror?
Was ist ein Void-Lookup bei SPF?
Sollte mein SPF-Eintrag mit ~all oder -all enden?
Kann eine Domain zwei SPF-Einträge haben?
Was ist SPF-Flattening, und sollte ich es nutzen?
Braucht eine Subdomain einen eigenen SPF-Eintrag?
Warum besteht SPF hier, fällt aber bei Gmail durch?
Was ist der Unterschied zwischen SPF, DKIM und DMARC?
Wie lange dauert es, bis eine Änderung am SPF-Eintrag wirkt?
Fehlt Ihnen etwas?Funktion oder neues Tool vorschlagen
Verwandte E-Mail- und DNS-Tools
MX-Abfrage
Mail-Exchange-Einträge und Mailserver-Details finden
DMARC-Check
DMARC-Richtlinie und Alignment-Einstellungen für jede Domain prüfen
DKIM-Check
DKIM-Einträge mit automatischer Selektor-Erkennung verifizieren
E-Mail-Header-Analyse
Rohe E-Mail-Header analysieren und den E-Mail-Weg verfolgen
IP-Blacklist-Check
Prüfen, ob eine IP-Adresse auf Spam- oder Malware-Blacklists steht
Reverse DNS-Abfrage
Hostnamen zu jeder IP-Adresse über PTR-Einträge finden
DNS-Abfrage
Alle DNS-Einträge direkt von den Nameservern der Domain, neben dem Cache von Google und Cloudflare
SPF-Generator
Einen gültigen SPF-TXT-Eintrag für Ihre E-Mail-Anbieter und Server erstellen, mit Live-Prüfung des Limits von 10 DNS-Lookups
