In dit artikel
Contactformulier WordPress werkt niet? Meestal ligt het niet aan het formulier, maar aan de manier van versturen. WordPress mailt standaard via de PHP-mailfunctie van je server, zonder bewijs dat de mail echt van jouw domein komt. Mailservers vertrouwen dat niet. Verstuur via SMTP met een maildienst, stel SPF, DKIM en DMARC in en bewaar elke inzending ook in je database of CRM.
Contactformulier WordPress werkt niet: begin met deze snelle checks
Je contactformulier in WordPress werkt niet, of je hoort al weken niets terwijl je zeker weet dat mensen je site bezoeken. Voordat je naar de techniek kijkt, wil je weten wat er precies misgaat. Er zijn twee heel verschillende problemen.
| Wat er gebeurt | Waar het probleem zit |
|---|---|
| Het formulier verstuurt niet, blijft laden of geeft een foutmelding | Op je website: een plugin, je cache of een spamfilter |
| Het formulier zegt "Bedankt", maar er komt geen mail | Bij het versturen van de mail |
Loop eerst deze punten na:
- Vul het formulier zelf in, op je telefoon en op je laptop. Zie je een bedankmelding?
- Kijk in je spammap en in die van je collega's. Ook in de map Ongewenst van Outlook.
- Controleer het ontvangstadres in de instellingen van je formulierplugin. Na een nieuwe medewerker of een ander e-mailadres staat daar vaak nog het oude adres.
- Kijk of de inzending is opgeslagen. Veel formulierplugins bewaren inzendingen in je dashboard. Staat hij daar wel, maar kwam er geen mail? Dan weet je zeker dat het aan het versturen ligt.
Verstuurt het formulier helemaal niet? Zet dan tijdelijk je cacheplugin uit en kijk of het formulier dan wel werkt. Werkt het nog steeds niet, kijk dan of een recente update van een plugin de oorzaak is. In dat geval helpen dezelfde stappen als wanneer WordPress helemaal niet meer werkt.
De echte oorzaak: WordPress mailt zonder bewijs van afzender
Meestal werkt het formulier prima en gaat het mis bij het versturen. Dat zit zo. WordPress verstuurt mail via de functie wp_mail. Die gebruikt standaard de mailfunctie van PHP op je webserver. Zonder aanpassingen staat er als afzender "WordPress" met het adres wordpress@jouwdomein.nl.
Voor de ontvangende mailserver ziet zo'n mail er verdacht uit:
- Geen DKIM-handtekening. De mail is niet digitaal ondertekend door jouw domein.
- Geen SPF-match. Je webserver staat vaak niet in het SPF-record van je domein, want dat record noemt meestal alleen je mailprovider.
- Geen DMARC. Veel domeinen hebben geen DMARC-beleid, waardoor ontvangers niet weten wat ze met twijfelgevallen moeten doen.
- Een gedeelde server. Op goedkope hosting delen vaak veel sites hetzelfde IP-adres. Verstuurt één site spam, dan lijdt jouw mail eronder. Sommige hosts beperken of blokkeren de mailfunctie zelfs helemaal.
Sinds februari 2024 zijn Gmail en Yahoo strenger. Iedereen die naar Gmail mailt, moet volgens Google minimaal SPF of DKIM hebben ingesteld. Wie rond de 5.000 of meer mails per dag naar Gmail verstuurt, heeft SPF, DKIM én DMARC nodig. Yahoo hanteert vergelijkbare regels. Een klein contactformulier valt niet onder de strengste eisen, maar mail zonder enige controle belandt wel steeds vaker in de spam of wordt geweigerd.
Hoe SPF, DKIM en DMARC precies werken, leg ik uitgebreid uit in het artikel over een nieuwsbrief die in de spam komt. Voor je formulier geldt dezelfde techniek.
De fout die bijna iedereen maakt: het adres van de invuller als afzender
In veel formulierplugins kun je instellen wie de afzender van de notificatie is. Het lijkt handig om daar het e-mailadres van de invuller neer te zetten. Dan klik je op Beantwoorden en mail je direct de klant.
Maar dan doet je website zich voor als bijvoorbeeld een Gmail-adres, terwijl de mail van jouw server komt. Zo'n mail zakt voor de DMARC-controle van het domein van de invuller. Afhankelijk van het beleid van dat domein wordt je eigen formulier dan geweigerd of als spam gemarkeerd.
De oplossing is simpel:
- Van: een adres op je eigen domein, bijvoorbeeld
website@jouwdomein.nl; - Antwoorden aan (Reply-To): het e-mailadres dat de bezoeker invulde.
Zo klik je nog steeds op Beantwoorden en mail je de klant, maar klopt de afzender.
SMTP instellen in WordPress: zo komen je mails wel aan
Met SMTP verstuurt WordPress de mail niet meer zelf, maar via een echte maildienst die je domein kan ondertekenen. Zo stel je het in.
Stap 1: kies een maildienst
Voor formulieren en andere automatische mails gebruik je een transactionele maildienst. Bekende voorbeelden zijn Brevo, Mailgun, Postmark en Amazon SES. Zulke diensten zijn gemaakt om losse, automatische mails betrouwbaar af te leveren en laten je je domein verifiëren. Voor een gewoon contactformulier is het volume klein. Kijk bij de dienst zelf welk abonnement daarbij past.
Je kunt ook versturen via de SMTP-server van je eigen zakelijke mailbox, zoals Microsoft 365 of Google Workspace. Dat werkt, maar die partijen stellen steeds strengere eisen aan de manier van inloggen. Een maildienst met een API-koppeling is meestal stabieler.
Stap 2: verifieer je domein
De maildienst geeft je een paar DNS-records. Die zet je bij de partij waar je domein staat, vaak je hostingpartij of domeinregistrar.
- SPF: voeg de maildienst toe aan je bestaande SPF-record. Een domein mag maar één SPF-record hebben, dus maak geen tweede aan.
- DKIM: voeg de sleutel toe die de maildienst geeft, meestal als CNAME- of TXT-record.
- DMARC: heb je nog geen DMARC-record, begin dan met het beleid
p=none. Dan krijg je rapporten zonder dat er mail wordt tegengehouden. Later scherp je het aan.
Het kan even duren voordat DNS-wijzigingen overal zichtbaar zijn. De maildienst laat zien wanneer je domein is geverifieerd.
Stap 3: installeer een SMTP-plugin
Installeer één SMTP-plugin, zoals WP Mail SMTP, FluentSMTP of Post SMTP. Kies in de plugin je maildienst en vul de API-sleutel of de SMTP-gegevens in. Stel als afzender een adres in op je geverifieerde domein, en zet de optie aan die dit afzenderadres voor alle mail afdwingt. Dan gebruiken ook andere plugins dat adres.
Biedt de plugin de mogelijkheid om de API-sleutel in wp-config.php te zetten in plaats van in de database? Doe dat. Dan staat je sleutel niet in de database als iemand daar ooit bij komt.
Stap 4: pas je formulier aan
Ga terug naar de notificatie-instellingen van je formulier. Zet bij Van je eigen domeinadres en bij Antwoorden aan het veld met het e-mailadres van de invuller. Controleer meteen of het ontvangstadres nog klopt.
Zo test je of je formulier echt werkt
Een formulier dat eenmalig werkt, kan na een update of een DNS-wijziging zomaar stoppen. Test daarom grondig en daarna regelmatig.
- Stuur een testmail vanuit de SMTP-plugin. Komt hij aan in je inbox en niet in de spam?
- Vul het formulier in met een Gmail-adres als invuller, en daarna met een Outlook-adres. Komt de notificatie binnen en kun je met Beantwoorden de invuller mailen?
- Controleer de headers. Open de mail in Gmail, klik op de drie puntjes en kies Origineel weergeven. Bij SPF, DKIM en DMARC wil je PASS zien.
- Kijk in het maillog van je SMTP-plugin, als die er een heeft. Daar zie je of een mail is verstuurd of geweigerd.
- Herhaal de test na elke grote update, een verhuizing van je site of een wijziging bij je mailprovider. Zet het in je agenda, bijvoorbeeld elke maand.
Dit soort controles hoort bij vast onderhoud van je site. Wat daar verder in hoort te zitten, lees je in website onderhoud: kosten en wat erin hoort.
Spam via je contactformulier tegengaan
Werkt je formulier weer, dan komt de volgende ergernis: spam. Bots vullen formulieren automatisch in met links en reclame. Dat is niet alleen vervelend. Stuurt je formulier een automatische bevestiging naar de invuller, dan kunnen spammers je site gebruiken om mail naar willekeurige adressen te sturen. Dat beschadigt de reputatie van je domein.
Dit zijn de middelen die werken, van licht naar zwaar:
- Honeypot. Een verborgen veld dat mensen niet zien en bots wel invullen. Is het veld ingevuld, dan wordt de inzending geweigerd. Veel formulierplugins hebben dit ingebouwd. Bezoekers merken er niets van.
- Cloudflare Turnstile. Een gratis alternatief voor de klassieke captcha. Volgens Cloudflare hoeven bezoekers meestal geen puzzel op te lossen, en je hoeft je website er niet voor via Cloudflare te laten lopen.
- Google reCAPTCHA. De bekendste captcha. Werkt goed en veel formulierplugins ondersteunen hem.
Bij Turnstile en reCAPTCHA gaan gegevens van bezoekers naar een externe partij. Vermeld dat in je privacyverklaring en check of het past bij je cookiebanner.
Daarnaast helpt het om je formulier kort te houden. Vraag alleen wat je echt nodig hebt, want elk extra veld is een reden om af te haken.
Sla inzendingen op en zet ze door naar je CRM
Ook met perfect ingestelde SMTP kan er iets misgaan: een volle mailbox, een collega die op vakantie is of een mail die iemand per ongeluk weggooit. Vertrouw daarom niet alleen op e-mail. Zorg dat elke aanvraag op minstens twee plekken terechtkomt.
Inzendingen bewaren in WordPress
Veel formulierplugins slaan inzendingen standaard op in je WordPress-database. Contact Form 7 doet dat niet. Daarvoor installeer je de aanvullende plugin Flamingo van dezelfde maker. Zo vind je elke aanvraag terug in je dashboard, ook als de mail nooit aankwam.
Bewaar alleen wat je nodig hebt en niet langer dan nodig. Het gaat om persoonsgegevens, dus de AVG geldt ook hier. Ruim oude inzendingen regelmatig op.
Aanvragen direct in je CRM of e-mailtool
Nog beter is als een aanvraag direct in het systeem komt waarmee je klanten opvolgt. Denk aan een CRM zoals Teamleader, of een e-mailtool zoals MailerLite of ActiveCampaign. Veel formulierplugins hebben daar een koppeling voor. Anders koppel je ze via een tool zoals Zapier of Make. Ik ben zelf Teamleader Partner en MailerLite Partner.
Het voordeel: een aanvraag kan niet meer ongezien in een mailbox blijven liggen. Je ziet hem in je overzicht, je kunt een taak aanmaken en er kan direct een automatische opvolging starten.
Bij Elkaar Ontmoeten zette ik automations op, zodat elke nieuwe aanmelding direct en zonder handwerk in ActiveCampaign terechtkwam. Lees het hele verhaal in de case van Elkaar Ontmoeten. Bij Social Training Club gingen nieuwe bestellingen via automations direct naar ActiveCampaign. Die case vind je tussen de andere cases.
Twijfel je welk CRM bij je past? Lees dan het artikel over CRM voor het mkb.
Conclusie: los de oorzaak op, niet het symptoom
Een contactformulier in WordPress dat niet werkt, is bijna altijd een mailprobleem. WordPress verstuurt standaard via de server, zonder SPF-match en zonder DKIM-handtekening, en vaak met het adres van de invuller als afzender. Verstuur daarom via een SMTP-plugin en een maildienst, verifieer je domein, zet het adres van de invuller bij Antwoorden aan en test regelmatig.
Ga daarna een stap verder: bewaar elke inzending in je database en zet hem door naar je CRM of e-mailtool. Dan raak je geen aanvraag meer kwijt, ook niet als de mail een keer hapert. Wil je weten hoe ik werk, van website tot automation? Lees dan het pitchdeck over mijn werkwijze.
Veelgestelde vragen
Waarom komt mail van mijn WordPress website in de spam terecht?
Omdat de ontvanger niet kan controleren of de mail echt van jouw domein komt. WordPress verstuurt standaard via de mailfunctie van je server, zonder DKIM-handtekening en vaak vanaf een server die niet in je SPF-record staat. Gmail, Yahoo en Outlook wantrouwen zulke mail. Verstuur via SMTP met een maildienst en stel SPF, DKIM en DMARC in voor je domein. Dan landt de mail weer in de inbox.
Welke SMTP-plugin kies ik voor WordPress?
Bekende en veelgebruikte plugins zijn WP Mail SMTP, FluentSMTP en Post SMTP. Ze doen in de basis hetzelfde: ze sturen alle mail van WordPress via een echte maildienst in plaats van via je server. Kies er een die je maildienst ondersteunt, bij voorkeur via een API-koppeling, en die een log bijhoudt van verstuurde mails. Installeer er maar één, want twee SMTP-plugins zitten elkaar in de weg.
Kan ik formulierinzendingen terugvinden die nooit in mijn inbox zijn aangekomen?
Alleen als je formulier ze ook opslaat. Veel formulierplugins bewaren inzendingen in je WordPress-database, zodat je ze in je dashboard terugvindt. Contact Form 7 doet dat niet: daarvoor heb je de aanvullende plugin Flamingo nodig. Sommige SMTP-plugins houden daarnaast een log bij van verstuurde mails. Werkte geen van beide, dan is een verloren aanvraag meestal niet meer terug te halen.
Heb ik een captcha nodig op mijn contactformulier?
Niet altijd. Een honeypot, een verborgen veld dat alleen bots invullen, houdt veel automatische spam al tegen zonder dat bezoekers er iets van merken. Krijg je toch veel spam, voeg dan Cloudflare Turnstile of Google reCAPTCHA toe. Turnstile werkt meestal zonder puzzels voor de bezoeker. Vermeld zo'n dienst wel in je privacyverklaring, want er gaan gegevens van de bezoeker naar die partij.
Benieuwd hoe ik dit in de praktijk aanpak?
Het pitchdeck laat de hele werkwijze zien.
Geschreven door Dennis Boekhout
Marketing freelancer uit 's-Hertogenbosch. Volg op LinkedIn (opent in een nieuw tabblad)