SPF PermError, te veel DNS-lookups of twee SPF-records? Lees hoe SPF werkt, wat de limiet van 10 lookups is en hoe je één correct SPF-record opbouwt.
SPF (Sender Policy Framework) is een TXT-record in de DNS van je domein met een lijst van servers die mail namens dat domein mogen versturen. De ontvangende mailserver kijkt bij elk bericht of de verzendende server op die lijst staat. Zo niet, dan wordt de mail vaker als spam gezien of geweigerd. Het record begint altijd met v=spf1 en eindigt meestal met ~all (anderen: verdacht) of -all (anderen: weigeren).
Een veelvoorkomende fout is PermError: too many DNS lookups. Bij het controleren mag een ontvanger maximaal 10 DNS-opzoekingen doen. Elke include:, a, mx, exists:, redirect= en ptr telt mee, en ook de opzoekingen binnen een include van een andere dienst tellen mee. Een paar includes van mailprovider, nieuwsbriefdienst, factuurpakket en webshop zitten daar snel boven. ip4:, ip6: en all tellen niet mee.
Andere fouten zijn: twee SPF-records op hetzelfde domein (dat mag niet en geeft ook een PermError), een tikfout zoals v=spf1 zonder spatie of met include :, een vergeten verzender (je website, je kassasysteem of je nieuwsbriefdienst staat er niet in) of een record dat met -all eindigt voordat alle verzenders erin staan.
spf=permerror, spf=fail of spf=softfail.Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Vraag alle TXT-records van je domein op en zoek de regels die met v=spf1 beginnen. Er mag er precies één zijn. Lange records worden soms in meerdere stukjes tussen aanhalingstekens getoond; dat is normaal, die worden aan elkaar geplakt. De Mail-DNS-check laat ook het aantal lookups zien.
dig voorbeeld.nl TXT +short
# Windows
nslookup -type=txt voorbeeld.nlStaan er twee records met v=spf1, bijvoorbeeld één van je mailprovider en één van je nieuwsbriefdienst, dan voeg je ze samen. Neem één keer v=spf1, zet alle mechanismen daarachter en sluit één keer af met ~all of -all. Verwijder daarna het tweede record.
# fout: twee records
v=spf1 include:spf.mailprovider.example ~all
v=spf1 include:spf.nieuwsbrief.example ~all
# goed: één record
v=spf1 include:spf.mailprovider.example include:spf.nieuwsbrief.example ~allTel elke include:, a, mx, exists: en redirect= in je record, en daarna de lookups in elk record dat je include’t. Dat laatste zie je door het opgegeven domein zelf op te vragen. Kom je boven de 10, dan krijg je een PermError, en dan telt je SPF voor veel ontvangers als ongeldig.
dig spf.mailprovider.example TXT +shortHaal mechanismen weg die je niet nodig hebt: a en mx zijn overbodig als je webserver en mailserver geen mail versturen of al via een include zijn gedekt. Verwijder includes van diensten die je niet meer gebruikt. Verstuurt een dienst vanaf vaste adressen, dan kun je die als ip4: of ip6: opnemen; dat kost geen lookup, maar je moet het bijwerken als die dienst van adres verandert. Een andere aanpak is een dienst laten versturen vanaf een subdomein met een eigen SPF-record, bijvoorbeeld nieuwsbrief.voorbeeld.nl.
Maak een lijst van alles wat mail verstuurt met je domein als afzender: je mailprovider, de website (contactformulier, webshop), je boekhoud- of factuurpakket, de nieuwsbriefdienst, een kassasysteem of CRM. Elke verzender geeft in zijn handleiding op wat je in SPF moet opnemen. Komt mail van je website niet aan, zie dan ook PHP-mail komt niet aan.
Begin met v=spf1 gevolgd door een spatie, scheid alle onderdelen met één spatie, zet geen spatie na een dubbele punt en zet all altijd als laatste: alles erachter wordt genegeerd. Gebruik het oude recordtype ‘SPF’ niet meer, alleen TXT. Begin met ~all en ga pas naar -all als je zeker weet dat alle verzenders erin staan.
v=spf1 ip4:203.0.113.25 include:spf.mailprovider.example ~allStuur na de wijziging een mail naar een externe mailbox, bijvoorbeeld een Gmail-account, en bekijk de kopregels (in Gmail via Origineel weergeven). Daar staat spf=pass als het goed is. Doe dat voor elke verzender: je mailprogramma, je website en je nieuwsbrief. Stel daarna ook DKIM en DMARC in: zie DKIM-fout en DMARC instellen.
Let op: Zet -all pas aan als je zeker weet dat alle verzenders in het record staan. Een vergeten verzender, zoals het contactformulier van je website, wordt anders door ontvangers geweigerd.
De limiet van 10 geldt voor het hele record, inclusief alles wat via includes wordt opgehaald.
include:, a, mx, ptr, exists:, redirect=.ip4:, ip6:, all.ptr wordt afgeraden; gebruik het niet.SPF controleert alleen het technische afzenderadres (de ‘envelope from’), niet het adres dat de ontvanger in zijn mailprogramma ziet. Daarvoor is DMARC nodig.
-all of een strenge DMARC-instelling, maar weet niet welke diensten allemaal namens je domein mailen.Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Nee. Bij twee of meer records met v=spf1 geeft de controle een PermError. Voeg ze samen tot één record.
Je SPF-record vraagt bij elkaar, inclusief alle includes, meer dan 10 DNS-opzoekingen. Ontvangers stoppen dan met controleren en zien je SPF als ongeldig.
Begin met ~all. Met -all vraag je ontvangers om mail van niet-genoemde servers te weigeren; doe dat pas als alle verzenders in het record staan.
Nee. SPF controleert alleen het technische afzenderadres. Combineer het met DKIM en DMARC om het zichtbare afzenderadres te beschermen.
Hulp nodig van een mens? Gratis Mail-DNS-check · Zakelijke e-mail in jouw plaats · Microsoft 365-hulp · Alle oplossingen