De functie mail() werkt, maar de post komt er slecht mee aan. Versturen via SMTP met authenticatie is betrouwbaarder.
Waarom mail() vaak in de spam belandt
Met mail() wordt het bericht rechtstreeks door de server verstuurd, zonder aanmelding met een e-mailaccount. Ontvangende servers zien dan een bericht dat lastiger te verifiëren is, en beoordelen het strenger.
Verstuurt u via SMTP met de gegevens van een echt e-mailadres op uw domein, dan doorloopt uw bericht dezelfde controles als gewone post en komt het beter aan.
Met PHPMailer
PHPMailer is de meest gebruikte bibliotheek hiervoor. U installeert hem met Composer of plaatst de bestanden zelf op de server.
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'mail.mijn-eigen-domeinnaam.nl';
$mail->SMTPAuth = true;
$mail->Username = 'website@mijn-eigen-domeinnaam.nl';
$mail->Password = 'het-wachtwoord';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->setFrom('website@mijn-eigen-domeinnaam.nl', 'Uw Bedrijf');
$mail->addAddress('info@mijn-eigen-domeinnaam.nl');
$mail->addReplyTo($email, $naam);
$mail->Subject = 'Bericht via de website';
$mail->Body = $inhoud;
$mail->send();Maak een apart mailadres aan
Gebruik niet uw persoonlijke mailbox maar een apart adres, bijvoorbeeld website@mijn-eigen-domeinnaam.nl. Lekt het wachtwoord ooit uit een script, dan is de schade beperkt.
Zet het wachtwoord niet in uw script
Plaats het in een apart configuratiebestand buiten uw public_html, of in een .env-bestand dat u afschermt. Een wachtwoord in een script dat per ongeluk als tekst wordt getoond, ligt op straat.
Bij WordPress
Daar hoeft u niet te programmeren: een SMTP-plugin regelt dit met een invulscherm. Dat is meteen de eenvoudigste oplossing als uw WordPress-post niet aankomt.