« Aucun courrier n'arrive » a deux causes très différentes : le serveur ne l'a jamais envoyé, ou il l'a envoyé et le destinataire l'a refusé. Le journal de messagerie répond à cela en une ligne, et tout le reste découle de la réponse.
tail -50 /var/log/mail.log
- status=sent — il est parti. Le problème est la remise, pas l'envoi : voir l'article sur le courrier qui atterrit dans les indésirables.
- status=bounced — le destinataire a refusé, et la ligne dit pourquoi.
- Rien du tout — l'application n'a jamais rien remis.
Quand rien n'arrive au journal
Le mail() de PHP renvoie true quand le programme de messagerie local a ACCEPTÉ le message, ce qui n'est pas la même chose que l'envoyer. Si aucun programme de messagerie n'est installé, il renvoie false, et la plupart des applications l'ignorent.
php -r 'var_dump(mail("you@example.com","test","body"));'
which sendmail
Utilisez SMTP plutôt que mail()
Un SMTP authentifié vers votre propre boîte est plus fiable et bien mieux remis : le message est signé et provient d'un serveur qui a une réputation, non d'un processus web.
Host: mail.yourdomain.com
Port: 465 (SSL) or 587 (TLS)
User: the full address
From: the SAME address
Testez le chemin, pas le formulaire
swaks --to you@example.com --from noreply@yourdomain.com --server mail.yourdomain.com:587 -tls -au noreply@yourdomain.com
Cela teste SMTP directement et affiche tout le dialogue. Si cela marche et que le site échoue quand même, la panne est dans les réglages de l'application, pas dans le serveur de messagerie.
mailq. Un message coincé dans la file a été accepté sans être encore remis, et la file nomme la raison de son attente.
