Contactformulier verstuurt niets, of de mail belandt in spam? Vaak verstuurt PHP mail() zonder SPF/DKIM namens je domein. Zo zet je verzending via SMTP op en controleer je de DNS.
Veel websites versturen mail met de PHP-functie mail(). Die geeft de mail af aan de mailserver van de webserver, die hem namens jouw domein verstuurt. Staat die server niet in het SPF-record van je domein en ondertekent hij niet met DKIM, dan zien ontvangers de mail als verdacht: hij komt in de spam of wordt geweigerd.
mail() geeft bovendien alleen terug of de mail is afgegeven, niet of hij aankwam. Een formulier kan dus 'verzonden' zeggen terwijl er niets aankomt.
Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Het SPF-record (een TXT-record) noemt welke servers namens je domein mogen mailen. Met onze Mail-DNS-check of met dig zie je het.
dig +short TXT voorbeeld.nl | grep spfLaat de website inloggen op de mailserver van je domein en daar versturen. Dan klopt SPF en kan DKIM worden toegepast. In WordPress doe je dat met een SMTP-plugin; in eigen code bijvoorbeeld met PHPMailer.
<?php
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.jouwmailprovider.nl';
$mail->SMTPAuth = true;
$mail->Username = 'website@voorbeeld.nl';
$mail->Password = getenv('SMTP_WACHTWOORD');
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
$mail->setFrom('website@voorbeeld.nl', 'Website');
$mail->addAddress('info@voorbeeld.nl');
$mail->addReplyTo($emailBezoeker);
$mail->Subject = 'Nieuw bericht via de website';
$mail->Body = $bericht;
$mail->send();Zet als afzender (From) een adres van je eigen domein, en het adres van de bezoeker in Reply-To. Mail 'namens' een Gmail- of Hotmail-adres van een bezoeker faalt door hun DMARC-beleid.
Laat je mailprovider DKIM inschakelen (een TXT- of CNAME-record) en voeg een DMARC-record toe. Zie mail komt in de spam.
Op een eigen server laat het maillog zien of de mail is verstuurd en wat de ontvangende server antwoordde.
sudo tail -n 50 /var/log/mail.logKom 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.
mail() meldt alleen dat de mail is afgegeven. Kijk in de spam, in het maillog, en stap over op SMTP.
Liever niet: de mail wordt dan namens een domein verstuurd dat jouw server niet toestaat. Zet de bezoeker in Reply-To.
Niet in code die in een openbare repository staat. Gebruik een configuratiebestand buiten de webmap of een omgevingsvariabele.
Hulp nodig van een mens? Website-onderhoud · WordPress-support · Hosting en onderhoud · Alle oplossingen