Je contactformulier werkt. Je hebt het getest. De bedankpagina verscheen. Maar de e-mail kwam nooit aan. Of erger: het werkte een tijdje prima, en toen opeens niet meer.
Dit is een van de meestvoorkomende WordPress-problemen. WPForms heeft meer dan 6 miljoen actieve installaties, Contact Form 7 meer dan 5 miljoen. Miljoenen sites zijn afhankelijk van formulierinzendingen die in iemands inbox terechtkomen. Als dat niet lukt, verdwijnen leads, blijven supportvragen onbeantwoord, en niemand merkt het tot een klant belt met de vraag waarom er nooit een reactie kwam.
Het standaardadvies is "installeer een SMTP-plugin." Dat helpt, maar het is niet het hele verhaal. Het echte probleem zit dieper: het is hoe WordPress standaard e-mail verstuurt, en waarom Gmail, Outlook en Yahoo dat steeds minder vertrouwen.
Kortom: WordPress verstuurt e-mail via PHP's ingebouwde mail()-functie, zonder authenticatie, zonder encryptie en zonder reputatie. In 2026 is dat genoeg voor de meeste spamfilters om je berichten te markeren of weg te gooien. De oplossing bestaat uit drie dingen: een goed From-adres, een transactionele e-mailservice, en DNS-records die bewijzen dat jouw domein het bericht heeft geautoriseerd.
Inhoudsopgave
- Hoe WordPress e-mail verstuurt (en waarom dat een probleem is)
- Vijf redenen waarom je contactformulier-e-mails in spam belanden
- De Contact Form 7-val
- Waarom "installeer een SMTP-plugin" niet genoeg is
- De echte oplossing, stap voor stap
- Je configuratie testen
- Wanneer dit niet van toepassing is
- De belangrijkste punten
Hoe WordPress e-mail verstuurt (en waarom dat een probleem is)
Alle e-mail die WordPress verstuurt gaat via één functie: wp_mail(). Contactformulierinzendingen, wachtwoordresets, WooCommerce-orderbevestigingen, pluginnotificaties. Alles.
Onder de motorkap is wp_mail() een wrapper rond PHPMailer, de open-source mailbibliotheek die in WordPress core zit. Standaard stuurt PHPMailer via PHP's native mail()-functie, die het bericht doorgeeft aan de mailserver op de webserver. Meestal Sendmail of Postfix.
Dat klinkt prima tot je beseft wat er ontbreekt:
- Geen authenticatie. Het bericht arriveert bij Gmail vanuit een willekeurig IP-adres, zonder bewijs dat jouw domein het heeft geautoriseerd.
- Geen encryptie. De verbinding tussen jouw server en de ontvangende mailserver gebruikt standaard geen TLS.
- Geen DKIM-handtekening. Er is geen cryptografisch bewijs dat het bericht niet onderweg is aangepast.
- Geen afleverstatus. Als het bericht stilletjes wordt geweigerd, weet WordPress dat niet.
wp_mail()geefttrueterug zodra PHPMailer het aan de lokale MTA heeft doorgegeven; wat daarna gebeurt is onzichtbaar.
Het standaard From-adres maakt het nog erger. WordPress stelt het in op wordpress@jouwdomein.nl met afzendernaam "WordPress." De meeste domeinen hebben helemaal geen mailbox op dat adres. Spamfilters merken dat.
Volgens data van WP Mail SMTP over meer dan 3 miljoen installaties halen sites met de standaard PHP mail()-functie een gemiddeld afleverpercentage van ongeveer 64%. Dat betekent dat grofweg één op de drie e-mails de inbox nooit bereikt.
Vijf redenen waarom je contactformulier-e-mails in spam belanden
1. Het From-adres matcht niet met de authenticatie van je domein
E-mail heeft twee aparte "From"-concepten, gedefinieerd in twee verschillende RFC's:
- De envelope sender (RFC 5321 MAIL FROM): wordt gebruikt tijdens de server-naar-server SMTP-transactie. Dit is wat SPF controleert. Ontvangers zien dit nooit.
- De header From (RFC 5322 From): het zichtbare afzenderadres in je inbox. Dit is wat DMARC controleert op alignment.
Wanneer WordPress via PHP mail() verstuurt, wordt de envelope sender ingesteld door de MTA van de server, vaak iets als apache@server42.hostingprovider.nl. De zichtbare From-header zegt wordpress@jouwdomein.nl. SPF controleert het envelopdomein (van de hostingprovider), niet het jouwe. Het SPF-record van jouw domein is volkomen irrelevant voor de daadwerkelijke authenticatiecheck.
DMARC ziet geen alignment tussen het geauthenticeerde domein en het zichtbare From-domein. Fail.
2. Je deelt een IP-adres met slechte buren
Op shared hosting deelt je site een IP-adres met tientallen of honderden andere sites. Als één van die sites spam verstuurt (of gehackt is en spam verstuurt zonder dat de eigenaar het weet), daalt de reputatie van het hele IP. Gmail en Outlook houden realtime reputatiedatabases bij voor verzend-IP's. Eén probleemgeval raakt elke legitieme afzender op dezelfde server.
Je kunt controleren of het IP-adres van je server op een blocklist staat via MXToolbox. Als het op meerdere lijsten voorkomt, gaan je e-mails het moeilijk krijgen, ongeacht wat je aan de WordPress-kant doet.
3. Er is geen DKIM-handtekening
DKIM voegt een cryptografische handtekening toe aan elke uitgaande e-mail. De ontvangende server verifieert die aan de hand van een publieke sleutel in je DNS. Het bewijst dat het bericht niet is aangepast en dat een geautoriseerde server het heeft verstuurd.
PHP mail() voegt geen DKIM-handtekening toe. Nul. Het bericht komt ongetekend aan, en dat is een signaal voor spamfilters dat de afzender niet de moeite heeft genomen om te authenticeren. Nu Google, Yahoo en Microsoft allemaal DKIM vereisen voor bulk-afzenders, valt ongetekende mail nog meer op.
4. Reverse DNS matcht niet
Wanneer een mailserver een verbinding ontvangt, doet deze een reverse DNS-lookup op het verbindende IP. Op shared hosting wijst het PTR-record meestal naar iets als server42.hostingprovider.nl. Je e-mail beweert van jouwdomein.nl te komen. Die mismatch is weer een spamsignaal.
Je hebt geen controle over het PTR-record op shared hosting; dat beheert je hostingprovider. En die stelt het in op hun eigen hostnaam, want het IP bedient veel domeinen.
5. De inhoud triggert filters
Contactformulier-e-mails hebben een paar structurele eigenaardigheden die spamfilters activeren:
- Generieke onderwerpregels als "Contactformulier ingezonden" of "Nieuw bericht van je website"
- HTML-opmaak van de formplugin zonder plain-text alternatief
- Inhoud die precies spiegelt wat een bezoeker typte, inclusief mogelijke triggerwoorden
Deze content-factoren zijn meestal minder zwaarwegend dan de authenticatieproblemen hierboven, maar ze tellen op. SpamAssassin kent punten toe per issue; passeer je de drempel (standaard: 5.0), dan wordt het bericht gemarkeerd.
De Contact Form 7-val
Contact Form 7 verdient een eigen sectie, want de standaardconfiguratie veroorzaakt actief deliverability-problemen.
Standaard stelt Contact Form 7 het From-veld in op [your-name] <[your-email]>. Dat gebruikt de naam en het e-mailadres van de formulierinzender als afzender. Dus wanneer een bezoeker je formulier invult met bezoeker@gmail.com, verstuurt Contact Form 7 een e-mail van bezoeker@gmail.com, verzonden via jouw WordPress-server.
Stel je voor wat Gmail ziet: een e-mail die beweert van een Gmail-adres te komen, verstuurd vanaf een shared hosting IP dat niet van Google is, zonder DKIM-handtekening van Google. Vanuit Gmails perspectief is dit spoofing. Het bericht gaat direct naar spam, of wordt helemaal geweigerd.
De eigen documentatie van Contact Form 7 beveelt aan om een e-mailadres op je eigen domein als From-adres te gebruiken, met het e-mailadres van de bezoeker in de Reply-To-header. Maar de standaardtemplate volgt dit advies niet, en de meeste site-eigenaren passen het nooit aan.
De fix is simpel. Verander in je Contact Form 7-mailinstellingen het From-veld naar:
Je Sitenaam <contact@jouwdomein.nl>
En voeg het e-mailadres van de bezoeker toe als Reply-To:
Reply-To: [your-email]
Zo gaan antwoorden nog steeds naar de bezoeker, maar de authenticatieketen blijft binnen jouw domein.
Waarom "installeer een SMTP-plugin" niet genoeg is
Het standaardadvies voor WordPress-e-mailproblemen is het installeren van WP Mail SMTP (4+ miljoen actieve installaties) of een vergelijkbare plugin. Deze plugins intercepten de phpmailer_init hook en configureren PHPMailer om via een externe SMTP-server te versturen in plaats van PHP mail().
Dat is echt beter. Je krijgt een geauthenticeerde verbinding, TLS-encryptie, en een verzend-IP dat niet je shared hosting server is. Maar het is niet de volledige oplossing, om drie redenen:
SPF moet nog steeds alignen. Als je WP Mail SMTP configureert om via een externe dienst te versturen, maar het From-adres op de e-mail is contact@jouwdomein.nl, dan controleert DMARC of het domein van de verzenddienst alignt met jouwdomein.nl. Tenzij je de dienst hebt toegevoegd aan het SPF-record van je domein, faalt SPF alignment.
DKIM moet van jouw domein zijn. Veel SMTP-diensten ondertekenen standaard met hun eigen DKIM-sleutel (bijv. d=sendgrid.net). Het domein van de DKIM-handtekening matcht niet met het zichtbare From-domein. DMARC faalt ook op DKIM alignment. Je moet DKIM-ondertekening voor jouw domein instellen bij de dienst, en dat betekent DNS-records toevoegen.
Gratis abonnementen delen IP-pools. Diensten als de gratis variant van Brevo (300 e-mails/dag) en Mailgun (100 e-mails/dag) gebruiken gedeelde IP-pools. Als andere gratis gebruikers de dienst misbruiken, lijdt de reputatie van de pool. Het is een betere pool dan je shared hosting server, maar het is nog steeds gedeeld.
De meest voorkomende misconfiguratie: WP Mail SMTP installeren, aansluiten op een dienst, en vervolgens geen DKIM of SPF instellen in DNS. De e-mail gaat nu via een andere server, maar is nog steeds niet geauthenticeerd vanuit het perspectief van je domein.
De echte oplossing, stap voor stap
Stap 1: fix het From-adres
De snelste winst. Verander het standaard WordPress From-adres naar een adres op je eigen domein. Dat kan in de instellingen van WP Mail SMTP onder "Forceer From-email," of met twee regels code:
add_filter( 'wp_mail_from', function() {
return 'contact@jouwdomein.nl';
});
add_filter( 'wp_mail_from_name', function() {
return 'Je Sitenaam';
});
Pas ook de instellingen van je contactformplugin aan. In Contact Form 7, WPForms of Gravity Forms: stel het From-adres in op je eigen domein en het e-mailadres van de bezoeker als Reply-To. Gebruik nooit het adres van de bezoeker als From-adres.
Stap 2: kies een transactionele e-mailservice
Een transactionele e-mailservice handelt de daadwerkelijke verzending af. Ze onderhouden IP-reputatie, bieden DKIM-ondertekening, verwerken bounces en geven je afleverlogboeken.
Voor de meeste WordPress-sites zijn dit de praktische opties:
| Service | Gratis tier | Betaald vanaf | Waarom overwegen |
|---|---|---|---|
| Brevo | 300/dag | €9/maand | Officiële WordPress-plugin, ruime gratis tier |
| Postmark | 100/maand | $15/maand | Hoogste onafhankelijke deliverability-scores |
| Mailjet | 200/dag | ~$17/maand | Grote gratis tier, Europees bedrijf |
| Resend | 3.000/maand | $20/maand | Moderne API, developer-friendly |
| Amazon SES | 3.000/maand (12 maanden) | $0,10/1.000 | Goedkoopst bij volume, complexe setup |
Voor een typische zakelijke WordPress-site met een contactformulier verwerkt Brevo's gratis tier 9.000 e-mails per maand zonder kosten. Postmark is de $15/maand waard als deliverability bedrijfskritisch is (het scoort consequent 93-98% inbox-plaatsing in onafhankelijke tests).
Stap 3: configureer DNS-authenticatie
Dit is de stap die de meeste handleidingen overslaan, en het is de stap die het verschil maakt.
Nadat je je transactionele e-mailservice hebt gekoppeld, moet je je domein verifiëren door DNS-records toe te voegen. Het dashboard van de service geeft je de exacte records. Doorgaans:
DKIM: een of meer CNAME-records die de DKIM-publieke sleutel van de service publiceren onder jouw domein. Dit maakt het mogelijk dat de service uitgaande e-mail ondertekent met een sleutel die verifieert tegen jouw DNS.
SPF: voeg de include:-directive van de service toe aan het bestaande SPF-record van je domein. Bijvoorbeeld, als je Brevo gebruikt:
v=spf1 include:sendinblue.com include:_spf.google.com ~all
DMARC: als je er nog geen hebt, voeg een monitoringrecord toe:
v=DMARC1; p=none; rua=mailto:dmarc@jouwdomein.nl
Begin met p=none om rapporten te verzamelen zonder de bezorging te beïnvloeden. Zodra je hebt bevestigd dat alles alignt, stap je over naar p=quarantine en uiteindelijk p=reject. Wil je begeleiding bij die stappen? Onze handleiding voor het instellen van SPF, DKIM en DMARC loopt het volledige proces door.
Stap 4: schakel "Forceer From-email" in
Schakel in WP Mail SMTP (of welke SMTP-plugin je ook gebruikt) de optie "Force From Email" in. Dit voorkomt dat andere plugins het geauthenticeerde From-adres overschrijven. Zonder deze instelling kan een contactformplugin het From-adres terugzetten naar het e-mailadres van de bezoeker, waardoor authenticatie kapot gaat terwijl de rest goed is geconfigureerd.
Je configuratie testen
Niet gokken. Testen.
-
mail-tester.com: geeft je een uniek e-mailadres. Verstuur een test vanuit je contactformulier en bekijk de score. Een 10/10 betekent volledige authenticatie. Alles onder de 7 verdient aandacht.
-
Gmail-headercheck: stuur een testmail naar een Gmail-adres. Open het bericht, klik op het driebolletjesmenu, kies "Origineel weergeven." Zoek naar de
Authentication-Results-header. Je wiltspf=pass,dkim=passendmarc=passzien. -
MXToolbox blacklist check: voer het IP-adres van je verzendserver in om te zien of het op blocklists staat. Als je een transactionele e-mailservice gebruikt, controleert dit het IP van de service, dat schoon zou moeten zijn.
-
Google Postmaster Tools: voor afzenders met meer volume laat Google's Postmaster Tools je domeinreputatie, afleverfouten en spampercentage over tijd zien. Google markeert domeinen die een spamklachtpercentage van 0,10% overschrijden en blokkeert bezorging bij 0,30%.
Verstuur na het fixen testberichten naar Gmail, Outlook en Yahoo. Controleer alle drie: ze hebben elk ander filtergedrag.
Wanneer dit niet van toepassing is
Deze handleiding behandelt het meest voorkomende scenario: een WordPress-site met een contactformulier waarvan de e-mails in spam belanden of verdwijnen. Maar er zijn situaties waar het probleem anders is:
- E-mails worden helemaal niet verstuurd: dat is een probleem op serverniveau, geen spamfilterprobleem. PHP
mail()is mogelijk uitgeschakeld door je host, of je SMTP-inloggegevens kloppen niet. Ons kennisbankartikel over WordPress-e-mail die niet verstuurd wordt behandelt dat scenario. - Je verstuurt marketing-e-mail via WordPress: nieuwsbrieven en bulkmail hebben dedicated infrastructuur, lijsthygiëne en uitschrijfafhandeling nodig. Een contactformulier-SMTP-setup is daar niet voor ontworpen.
- Je domein staat al op een blocklist: als je domein (niet alleen het IP) een slechte reputatie heeft door eerder misbruik, lost het fixen van authenticatie het niet direct op. Het duurt weken voordat reputatie herstelt.
De belangrijkste punten
- WordPress verstuurt e-mail via PHP
mail()standaard, zonder authenticatie, encryptie of afleverbevestiging. Zo'n 36% van die e-mails bereikt de inbox nooit. - De grootste boosdoener is niet je formplugin. Het is het ontbreken van SPF-, DKIM- en DMARC-alignment tussen je domein en de server die de e-mail verstuurt.
- De standaardconfiguratie van Contact Form 7 gebruikt het e-mailadres van de bezoeker als From-adres, wat technisch gezien spoofing is en wordt gemarkeerd door Gmail, Outlook en Yahoo.
- Een SMTP-plugin is noodzakelijk maar niet voldoende. Zonder DNS-records (SPF + DKIM) en DMARC-alignment voor je domein heb je het ongeauthenticeerd versturen alleen verplaatst naar een andere server.
- De volledige fix: eigen-domein From-adres + transactionele e-mailservice + DNS-authenticatierecords. Dat brengt deliverability van ~64% naar meer dan 96%.
Wil je e-mailinfrastructuur liever niet zelf beheren? Professionele e-mailhosting neemt dit uit handen, inclusief authenticatie, monitoring en deliverability.