«Hiç posta gelmiyor» ifadesinin birbirinden çok farklı iki sebebi vardır: ya sunucu onu hiç göndermemiştir ya da göndermiş ve alıcı reddetmiştir. Posta kaydı bunu tek satırda yanıtlar, gerisi de o yanıttan doğar.

tail -50 /var/log/mail.log
  • status=sent — çıkmış. Sorun teslimde, göndermede değil: postanın istenmeyene düşmesiyle ilgili yazıya bakın.
  • status=bounced — alıcı reddetmiş ve satır sebebini söylüyor.
  • Hiçbir şey yok — uygulama hiçbir şeyi teslim etmemiş.

Kayda hiçbir şey ulaşmıyorsa

PHP'nin mail() işlevi, yerel posta programı iletiyi KABUL ettiğinde true döndürür; bu, onu göndermekle aynı şey değildir. Kurulu bir posta programı yoksa false döndürür ve uygulamaların çoğu bunu görmezden gelir.

php -r 'var_dump(mail("you@example.com","test","body"));'
which sendmail

mail() yerine SMTP kullanın

Kendi posta kutunuza kimliği doğrulanmış SMTP daha güvenilirdir ve çok daha iyi teslim edilir: ileti imzalıdır ve bir web sürecinden değil, itibarı olan bir sunucudan gelir.

Host: mail.yourdomain.com
Port: 465 (SSL) or 587 (TLS)
User: the full address
From: the SAME address
From adresi, gönderen alan adında gerçekten var olan bir posta kutusu olmalıdır. Ziyaretçinin adresiyle gönderen bir form, alıcıda SPF denetimini geçemez; çünkü sunucunuzun onun adına göndermeye izni yoktur. Ziyaretçiyi Reply-To alanına koyun.

Formu değil, yolu sınayın

swaks --to you@example.com --from noreply@yourdomain.com --server mail.yourdomain.com:587 -tls -au noreply@yourdomain.com

Bu, SMTP'yi doğrudan sınar ve konuşmanın tamamını yazdırır. Çalışıyor ama site yine de beceremiyorsa, kusur posta sunucusunda değil uygulamanın ayarlarındadır.

Kaydın yanı sıra kuyruğa da bakın: mailq. Kuyrukta takılı bir ileti kabul edilmiş ama henüz teslim edilmemiştir ve kuyruk, beklemesinin sebebini adıyla söyler.