La posta mandata da un'applicazione di solito fallisce in silenzio. La funzione restituisce true, il messaggio viene consegnato a un processo locale, e nulla le dice che un'ora dopo è stato rifiutato. Il rimedio è mandare via SMTP autenticato, dove un fallimento è un errore che si vede.

Non usi mail()

  • Riferisce se il messaggio è stato consegnato all'anello successivo, non se è arrivato a destinazione.
  • Manda con l'identità dell'utente del server web, quindi SPF e DKIM di solito falliscono.
  • Non ha autenticazione, né un secondo tentativo, né un log che lei possa leggere.

Usi SMTP

use PHPMailer\PHPMailer\PHPMailer;

$m = new PHPMailer(true);
$m->isSMTP();
$m->Host       = 'mail.yourdomain.com';
$m->SMTPAuth   = true;
$m->Username   = 'noreply@yourdomain.com';
$m->Password   = getenv('SMTP_PASS');
$m->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$m->Port       = 465;

$m->setFrom('noreply@yourdomain.com', 'Your Shop');
$m->addReplyTo('support@yourdomain.com');
$m->addAddress($customerEmail);
$m->Subject = 'Your order';
$m->Body    = $text;
$m->send();
Non metta mai la password nel codice. La legga dall'ambiente, e tenga il file d'ambiente fuori dal document root e fuori da git.

Il From dev'essere il suo dominio

Mettere nel From l'indirizzo del cliente perché le risposte funzionino è l'errore classico: così sta mandando come gmail.com, e questo non supera affatto il loro SPF e il loro DMARC. Mandi con il suo dominio e imposti Reply-To su quello del cliente.

La mandi in background

Mandarla durante la richiesta fa aspettare il visitatore dietro a un server remoto e trasforma un disservizio di posta in una cassa rotta. La metta in coda e la mandi da un worker.

E registri l'esito

$m->SMTPDebug = 2;   // development only
// production: record the message ID and the accept/reject per recipient
Per tutto ciò che è transazionale - ricevute, reimpostazioni di password - usi un servizio di invio dedicato. La recapitabilità è tutto il loro mestiere, e separa le sue ricevute dalle sue newsletter: veda posta transazionale e newsletter.