Het is stil. Al een paar weken komen er geen aanvragen meer via de website, terwijl het daarvoor wekelijks raak was. U schrijft het toe aan de vakantieperiode, de economie, misschien een concurrent. Tot een klant belt en zegt: “Ik heb drie keer een formulier ingevuld, maar ik hoorde niets.” Dat formulier gaf keurig een groene melding. Alleen kwam de e-mail nooit aan.
Als uw contactformulier niet werkt in WordPress, ligt de oorzaak in negen van de tien gevallen niet bij het formulier. Het formulier doet zijn werk: het verzamelt de gegevens en geeft ze door aan WordPress met de vraag “verstuur dit”. Wat er daarna gebeurt, is waar het misgaat. Daarover gaat dit artikel.
Het symptoom: alles lijkt te werken
Dit maakt deze fout zo verraderlijk. Bij een wit scherm of een foutmelding weet u dat er iets is. Een formulier dat “Bedankt voor uw bericht” toont en niets aflevert, kan maanden onopgemerkt blijven. Vaak zijn er wel signalen, maar die worden anders uitgelegd:
- De aanvragen zijn geleidelijk minder geworden, niet in één keer gestopt.
- U ontvangt wél spam via het formulier, maar geen echte berichten (of andersom).
- Berichten komen soms wel en soms niet aan, zonder herkenbaar patroon.
- De testmail die u zelf verstuurt komt aan, maar die van klanten niet.
- Het is begonnen rond een verhuizing, een nieuw e-mailpakket of een SSL-installatie.
Waarom het contactformulier niet werkt: de echte oorzaak
WordPress verstuurt e-mail standaard via de PHP-functie mail(). De webserver gooit het bericht dan zonder verdere controle de wereld in, met als afzender iets als wordpress@uwdomein.nl. Dat werkte in 2010 prima. Tegenwoordig controleren ontvangende mailservers (Gmail, Outlook, KPN, Ziggo) streng of de verzendende server wel namens uw domein mag mailen. Kan de server dat niet aantonen, dan verdwijnt het bericht in de spammap of wordt het stilzwijgend weggegooid. Het formulier krijgt daar nooit een foutmelding van; de server heeft het bericht immers netjes overhandigd.
De drie onderliggende problemen die wij het vaakst zien:
- Uw SPF-record staat de webserver niet toe. Sinds u zakelijke e-mail bij Microsoft 365 of Google Workspace heeft, staat in uw DNS dat alleen die servers mogen mailen namens uw domein. De webserver staat er niet bij en wordt dus geweigerd.
- Het afzenderadres is een adres van uw eigen domein, maar het bericht komt van een andere server. Formulieren staan vaak ingesteld om het adres van de invuller als afzender te gebruiken (“Van: klant@gmail.com”). Gmail ziet dan een bericht dat beweert van Gmail te komen, maar via uw hosting is verstuurd. Dat wordt vrijwel altijd geblokkeerd.
- De hostingpartij blokkeert of beperkt mail() helemaal. Steeds meer hosters zetten de functie uit vanwege spammisbruik, of beperken het aantal berichten per uur.
Het is goed om te beseffen dat een formulierplugin hier niets aan kan doen. Contact Form 7, WPForms, Gravity Forms, Fluent Forms, Elementor Forms: ze leveren allemaal netjes af bij WordPress. Van plugin wisselen lost dit dus niet op.
Zo stelt u vast waar het misgaat
Voordat u iets verandert, wilt u weten waar het bericht blijft hangen. Dat kost tien minuten.
- Kijk in de inzendingen van het formulier. De meeste formulierplugins bewaren berichten in de database (bij Contact Form 7 heeft u daar de aparte plugin Flamingo voor nodig). Staan de berichten daar wel, dan is het probleem de e-mail, niet het formulier.
- Verstuur een testbericht naar een Gmail-adres én naar een Outlook-adres. Kijk in beide spammappen. Komt het bericht in spam, dan is het een reputatie- of SPF-kwestie. Komt er helemaal niets, dan wordt het bericht geweigerd of nooit verzonden.
- Installeer tijdelijk een mail-logplugin (WP Mail Logging of de logfunctie van een SMTP-plugin). Die laat zien of WordPress het bericht heeft aangeboden en of de server een fout teruggaf.
- Controleer uw SPF-record. Met een gratis online DNS-tool zoekt u het TXT-record op dat begint met v=spf1. Staat uw hostingpartij daar niet in, dan heeft u de oorzaak gevonden.
De oplossing: laat de website mailen via een echte mailserver
De structurele oplossing is dat uw website niet meer zelf mailt, maar via SMTP aflevert bij een mailserver die daarvoor bedoeld is. Dat kan uw eigen zakelijke mailbox zijn (Microsoft 365, Google Workspace, de mailserver van uw hoster) of een transactionele maildienst zoals Brevo, Postmark of Mailgun. Het bericht komt dan van een server die wél in uw SPF-record staat en de ontvanger vertrouwt het.
Daarvoor installeert u een SMTP-plugin (WP Mail SMTP, FluentSMTP en Post SMTP zijn de bekendste), vult de gegevens van de mailserver in en verstuurt een testbericht. Het precieze stappenplan staat in onze handleiding voor SMTP in WordPress. Zet daarnaast in het formulier het afzenderadres altijd op een adres van uw eigen domein en gebruik het adres van de invuller alleen als antwoordadres (Reply-To).
Verstuurt u meer dan een paar honderd formulierberichten per maand, of ook orderbevestigingen vanuit een webshop, kies dan een transactionele maildienst boven uw eigen mailbox. Die is daarop gebouwd en houdt bij wat er is afgeleverd.
Wat u daarnaast controleert
Soms speelt er nog iets mee. Loop deze punten na als het formulier na de SMTP-instelling nog steeds hapert:
- De ontvangerinstelling in het formulier. Staat daar nog het adres van de vorige eigenaar of een oud-medewerker?
- Spamfilters van het formulier zelf. Een te streng ingestelde Akismet of honeypot gooit echte berichten weg zonder melding.
- reCAPTCHA-sleutels die verlopen of verkeerd zijn. Dan werkt het formulier alleen voor wie de captcha toevallig haalt.
- Een cacheplugin die de formulierpagina te agressief cachet, waardoor de beveiligingstoken van het formulier verouderd is.
- JavaScript-fouten op de pagina, vaak na een update van thema of pagebuilder, waardoor de verzendknop niets doet maar de pagina ook geen fout toont.
Een hoveniersbedrijf uit Nijmegen ontdekte na de overstap naar Microsoft 365 dat er drie maanden lang geen enkele offerteaanvraag was aangekomen; de berichten stonden allemaal keurig in de database. Wie zoiets liever niet zelf uitzoekt, kan dit als losse klus laten oppakken via een bugfixingdienst: diagnose, SMTP-koppeling en een testronde vanaf verschillende mailproviders.
Conclusie
Een formulier dat “verzonden” zegt maar niets aflevert, is bijna altijd een e-mailprobleem: de webserver mag niet namens uw domein mailen. Controleer eerst of de berichten in de database staan, kijk dan naar SPF en spammappen, en laat uw site vervolgens via SMTP mailen. En test daarna elk kwartaal even zelf het formulier vanaf een extern adres; het is de goedkoopste verzekering tegen een stille inbox.



