Come posso ottenere il mittente corretto con mail() in PHP? SMTP
Se il Suo sito web invia e-mail con la funzione PHP mail(), i messaggi partono senza autenticazione. Il mittente tecnico (Return-Path) è spesso l'account di sistema del Suo pacchetto, e non il Suo indirizzo. Di conseguenza SPF e DMARC non risultano corretti, i messaggi finiscono più spesso nello spam e le notifiche di errore arrivano in una casella che nessuno controlla.
Per questo è consigliabile far inviare le e-mail al Suo sito web tramite SMTP con autenticazione, proprio come fa il Suo programma di posta. In questo modo il mittente è il Suo indirizzo e i messaggi vengono trattati come normali e-mail del Suo dominio.
I dati per SMTP
- Server: il Suo nome di dominio (jouwdomein.nl) se il Suo sito web è ospitato da WebOké, oppure il nome del server del Suo pacchetto, ad esempio linux2023.webawere.nl. Lo trova in Mio WebOké alla voce I miei prodotti, nella colonna Server.
- Porta: 465 con SSL/TLS, oppure 587 con STARTTLS.
- Nome utente: l'indirizzo e-mail completo di una casella di posta, preferibilmente una casella dedicata al sito web, ad esempio website@jouwdomein.nl.
- Password: la password di quella casella di posta.
Come mittente (From) utilizzi l'indirizzo di quella casella di posta, oppure un forwarder che inoltra ad essa. L'indirizzo di un visitatore non va mai inserito in From, ma in Reply-To. Altrimenti il server rifiuta il messaggio oppure questo finisce nello spam.
Esempio con PHPMailer
Una libreria molto diffusa è PHPMailer. La può installare con Composer (composer require phpmailer/phpmailer).
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
// SMTP-instellingen
$mail->isSMTP();
$mail->Host = 'jouwdomein.nl';
$mail->Port = 465;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->SMTPAuth = true;
$mail->Username = 'website@jouwdomein.nl';
$mail->Password = 'wachtwoord';
$mail->CharSet = 'UTF-8';
// Afzender, antwoordadres en ontvanger
$mail->setFrom('website@jouwdomein.nl', 'Website jouwdomein.nl');
$mail->addReplyTo('bezoeker@example.net');
$mail->addAddress('info@jouwdomein.nl');
// Bericht
$mail->Subject = 'Testbericht';
$mail->Body = 'Dit is een testmail verzonden via SMTP.';
$mail->send();
echo 'E-mail verzonden';
} catch (Exception $e) {
echo 'Versturen mislukt: ' . $mail->ErrorInfo;
}
Utilizza WordPress o WooCommerce? In tal caso può configurare tutto questo con un plugin SMTP, veda Inviare e-mail da WordPress e WooCommerce in modo affidabile tramite SMTP. Come proteggere un modulo dallo spam lo trova in Un modulo di contatto sul Suo sito web: inviare i campi via e-mail e prevenire lo spam.
Desidera saperne di più? Segua il corso gratuito E-mail in ordine, lezione 7.3 E-mail dal Suo sito web e moduli.
Desidera saperne di più? Segua il corso gratuito di WordPress, lezione 9.1 E-mail da WordPress.
