Vorige week kreeg ik een berichtje van een klant: “We hebben al twee weken geen aanvragen meer gehad, is dat normaal?” Nee, dat is niet normaal. Na vijf minuten zoeken bleek het contactformulier al veertien dagen niks te versturen. De site zag er prima uit. Geen foutmelding. Gewoon stilte.
Dit is een van de vervelendste problemen in websiteonderhoud, want het valt niet op. Een kapotte pagina geeft een foutcode. Een formulier dat niet mailt, geeft niks. De bezoeker denkt dat hij een bericht heeft gestuurd. De eigenaar denkt dat er geen aanvragen zijn. Ondertussen loopt omzet weg.
Hoe WordPress standaard mail verstuurt
WordPress gebruikt de PHP-functie mail() om berichten te versturen. Die functie leunt op de mailconfiguratie van de server. Op sommige hostingomgevingen werkt dat prima, op veel andere helemaal niet.
Het probleem is dat mail() geen authenticatie gebruikt. De ontvangende mailserver ziet een bericht binnenkomen van een IP-adres dat geen relatie heeft met het domein in het afzenderadres. Moderne spamfilters vertrouwen dat niet, en terecht. Het bericht verdwijnt in de spammap, of wordt stilletjes geweigerd. Geen bouncemelding, geen logboek, niets.
Dit is niet iets wat plots breekt. Het werkte soms al nooit goed, maar de eerste testmails kwamen aan omdat die naar een eigen mailbox gingen die minder streng filtert.
De oplossing: verstuur via SMTP
SMTP staat voor Simple Mail Transfer Protocol. Je stuurt dan niet via de server zelf, maar via een echte mailserver met een gebruikersnaam, wachtwoord en authenticatie. Dat kan de mailserver van het domein zijn, of een externe dienst die daarvoor bedoeld is.
De meeste WordPress-installaties hebben hiervoor een plugin nodig, want WordPress biedt dit niet standaard. Er zijn meerdere plugins die dit regelen. Je vult in:
- de hostnaam van de SMTP-server
- het poortnummer (meestal 587 voor TLS)
- een gebruikersnaam en wachtwoord
- het afzenderadres
Daarna stuur je een testmail vanuit de plugin zelf. Komt die aan, dan is de configuratie goed. Komt die niet aan, dan zie je nu tenminste een foutmelding in plaats van stilte.
Wat er verder nog mis kan gaan
SMTP instellen lost het meest voorkomende probleem op, maar niet alles. Er zijn meer redenen waarom formulieren stoppen met mailen.
De plugin is geüpdatet en heeft een conflict gekregen. Formulierplugins zijn complexe stukken software. Een update kan een stille fout introduceren waarbij de mail niet meer wordt aangemaakt. Controleer na elke grote update of het formulier nog werkt door zelf een testbericht te sturen.
Het ontvangende mailadres is veranderd. Klinkt simpel, maar het gebeurt vaker dan je denkt. Iemand heeft het mailadres in de plugin aangepast, of het domein van de mailbox is verlopen. Het formulier stuurt netjes, maar naar een adres dat niet meer bestaat.
De hosting heeft iets veranderd. Sommige hosters schakelen mail() uit of wijzigen hun SMTP-instellingen zonder aankondiging. Wat gisteren werkte, werkt vandaag niet meer. Een goede reden om SMTP-instellingen apart te documenteren.
De spambeveiliging blokkeert te veel. Sommige formulieren hebben een honeypot of captcha die te agressief is ingesteld. Berichten worden dan wel ingediend, maar als spam gemarkeerd en nooit verstuurd. Kijk in de logs van de formulierplugin of er inzendingen worden geregistreerd.
Logs zijn je beste vriend
De meeste serieuze formulierplugins bewaren een log van inzendingen. Dat is de eerste plek om te kijken. Als de inzending in de log staat maar de mail niet aankomt, is het een mailprobleem. Als de inzending niet eens in de log staat, is er iets mis vóór het versturen, waarschijnlijk een conflict of een kapotte formulierconfiguratie.
Datzelfde geldt voor SMTP-plugins. De meeste hebben een eigen log die bijhoudt of de verbinding met de mailserver is gelukt en of de mail is geaccepteerd. “Geaccepteerd door de mailserver” betekent nog niet dat de mail aankomt, maar het vertelt je in elk geval dat het probleem verder stroomafwaarts ligt.
Zonder logs ben je blind aan het zoeken. Zet ze aan als je dat nog niet hebt gedaan.
Een eenvoudige testprocedure voor onderhoud
Dit is wat ik elke maand doe voor klanten waarbij formulieren bedrijfskritisch zijn. Het kost vijf minuten.
- Ga naar het contactformulier op de live site
- Vul het in met een testbericht, gebruik een onderwerp dat je makkelijk herkent
- Controleer of de bevestigingsmelding op de site verschijnt
- Controleer of de mail aankomt op het ingestelde adres
- Controleer of de inzending in de plugin-log staat
Als één van die drie stappen mislukt, weet je meteen in welk deel van de keten het mis gaat. Dit is geen geautomatiseerde monitoring, maar het is beter dan ontdekken dat het al weken kapot is omdat een klant klaagt over geen aanvragen.
Wil je het automatiseren, dan zijn er externe monitoringdiensten die periodiek een formulier invullen en controleren of de mail aankomt. Dat is voor drukke e-commercesites de moeite waard.
Samengevat
Een formulier dat niet mailt is onzichtbaar kapot. De oorzaak is vrijwel altijd de mailconfiguratie van de server, een conflicterende update, of een verkeerd ingesteld ontvangeradres. De oplossing begint met SMTP instellen en logs aanzetten. De rest is periodiek testen, zodat je het zelf ontdekt voordat je klant het merkt.