PHP posta çalışmayı durdurdu

6 Cevap php

Kullanırken bazı gün önce mail() o çalışma vardı.

Ama şimdi çalışmıyor. Ve ben sorunun ne olduğunu bilmiyorum.

$to      = 'testmail@gmail.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: sender@gmail.com' . "\r\n" .
    'Reply-To: sender@gmail.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

$mail_sent = @mail( $to, $subject, $message, $headers ); 
echo $mail_sent ? "Mail sent" : "Mail failed";

Bu "Posta gönderildi" görüntüler.

Ben Apache veya bu kodda bir şey dokunulmaz değil. Ben aynı sonucu boş bir PHP dosyası kodu test ettik. Bu sorunu nasıl hata?

6 Cevap

Could it be that E-Mails are being sent fine, but are caught by a spam filter? If this could be, allow me to cross-post myself:


Birkaç mermi noktaları () (bu posta varsayılarak doğru döner ve hiçbir hata hata günlüğüne vardır):

  • Gönderici adresi ("Kimden"), sunucu üzerinde bir etki alanına mı ait? Değilse, o kadar yapmak.
  • Bir kara liste üzerinde sunucu (örneğin spamhaus.org üzerine IP kontrol) mı? Bu hosting ile uzak bir ihtimaldir.
  • Postalar bir spam filtresi tarafından filtre edilir? Bir spam klasörü vardır bir freemailer ile bir hesap açın ve öğrenmek. Ayrıca, bir spam filtresi olmadan bir adrese mail göndermeyi deneyin.
  • Muhtemelen bir gönderici adresi eklemek için posta beşinci parametre "-f" () ihtiyacım var? (PHP kılavuzda) komutu (mail bak)
  • Eğer log dosyalarını erişiminiz varsa, yukarıda önerildiği gibi, elbette bu, kontrol edin.
  • Address olası sıçrama postalar için ("gönderene geri döndü"): Eğer "dan" kontrol ediyor musunuz? Sen ayrı bir "hata" e-adresi kurabilirsiniz.

Almanca konuşanlar için, ben yazdım oldukça ayrıntılı "ne için" bir süre önce bu konuda. Bkz here.

When you send an email using mail() php hands the data over to the application you configured in sendmail_path, i.e. it spawns a new process for <sendmail_path> and passes some parameters and the email data. This application is supposed to inject the email into the queue of a Mail Transfer Agent (MTA).
The return value of php's mail() function "only" reflects if php was able to spawn that process, stream the data to it and the process exits without an error code. I.e. mail()==true only tells you that the email was (supposedly) injected into the queue of the first MTA on the route.

The MTA then decides what to do with the email. You're probably not working for google and your own MTA is not "within" gmail.com. So your MTA has to send it to the next MTA on the path to gmail.com (forward-path). This may work or not, but mail()===true doesn't tell you anything about that.
Relaying the mail from MTA to MTA may fail on any of the steps. And when the mail finally arrives "at" gmail.com the last MTA or the Mail Delivery Agent (MDA) may also reject it for various reasons.

Eğer bir hata oluşursa "geçerli" MTA bir hata raporu geri göndermek (aslında, ama bu tüm ;-) iyi yapılandırılmış varsayarak bulunuyor olmalıdır) olabilir. Bu hata raporu, ileriye yol ancak ters sırayla (ters-yol) ve son olarak (ya da "umarım") orijinal bir "teslim edilemeyen posta" e-posta alır izler.

(Ve bu kısa versiyonu. Muhtemelen yanlış ve ben bir yönetici ne de bir e-posta / SMTP uzman ;-) ne değilim)

Yani ... ne yapabilirim?

  1. Bize sunucusu hakkında daha fazla anlat. Kendi (ev / test) server mi? Hangi işletim sistemi. Eğer kurulmuş olan "posta sistemi" biliyor musun (sendmail, qmail, ...)? Kim yapılandırılmış?

  2. Server Fault bir şeyler yanlış gitti ve nasıl e-postalarınızı kabul google ikna eğer size deneyebilirsiniz nasıl, sunucunuzun mail sistemi kurmak için nasıl isteyin.

  3. Noktasına ilk MTA veya daha fazla php script kendisi, ilk MTA haline izin eleyin. Sen mesela kullanarak bunu yapabilirsiniz Swiftmailer yerine posta (SMTP onun taşıma modülü kullanarak) (). Bu şekilde, sunucunun yerel posta sistemi düzgün çalışmak zorunda değildir. Script "doğrudan", google SMTP sunucusu başvurun "sen" kimlik ve google posta teslim edecek. Hala posta teslim edilecektir garanti etmez ama swiftmailer sinyalleri "Tamam" o gerçekten posta daha () "gerçek" dönen ok daha olasıdır eğer çok daha büyük olasılıkla bir hata komut, yani derhal bildirilir.

Bu gmail.com gelmek iddia çünkü posta işleme SMTP sunucusu iletiyi reddetme olabilir.

Alanınızdan bir adrese $headers de 'Kimden' alanını değiştirmeyi deneyin.

Eh, ben bazı diğer çocuklar tarafından yönetilen ücretsiz / ticari sunucusu kullanarak bahis. Hatta doğru php sözdizimi takip e-posta alınamıyor Ne yazık ki, bazen sunucu ayarı doğru değil. Müşteri servis merkezi ile temasa denemek ve onları sizin için tanısal şeyler yapalım.

Bu (! Justhost sorumlu olduğu) bir süre için benim sunucu olur bu yüzden sizin için yararlı olabilir.

Lütfen phpinfo bu özelliklerini kontrol edin (); (Bu izin eğer olduğunu görmek için)

sendmail_from   no value	no value
sendmail_path   /usr/sbin/sendmail -t -i	/usr/sbin/sendmail -t -i

Şansı, bu özelliklerinin iyi yapılandırılmamış vardır.

Ben php deyimi ile yanlış bir şey görmüyorum :)

Düzenlenen: Ayrıca (çoğu Linux sunucuları varsayılan olarak yüklü olarak Perl en iyi) başka bir dilde yazdığı mail script yükleyebilirsiniz. Orada e-posta göndermek eğer bakın. Eğer öyleyse, o zaman ben sunucu yapılandırma hatası olduğunu varsayalım (php.ini sorunu?), Senin değil. Perl ya da e-posta gönderebilirsiniz yapamıyorsanız, iyi ... müşteri servis merkezinde çocuklar bildirmek ve paranızı geri alabilirsiniz görmek :)

Eğer çalışmak için kullanılan sağ ve kod artık çalışmıyor iseniz, o zaman kodu dışında bir şey değişmiş olmalıdır. E-posta ile müdahale edebilecek en az 2 MTAs (bir yerel ve bir uzak) var. Eğer yerel bir kontrol ederse, o zaman iletilmekte ise kuyruk ve günlükleri denetler.

Ne yazık ki, spam hacmi ve doğa, bir sürü insan onunla ilgili olmayan standart bir yöntem icat - RBL, RMX, domain Keys, gönderenin kimliği, bayesian filtreler var .... Bu yaklaşımlar özünde yanlış bir şey ama için tek taraflı bilgisi olmadan sık sık servis sağlayıcıları tarafından uygulanan gerçek, hizmet kullanıcılarının yalnız rıza edelim. Ve sağlayıcıları genellikle yere koyduk hükümleri hakkında çok gizli vardır. Eğer gmail gönderme eğer Ama sonra muhtemelen kullanmak bayesian benzeri filtreleme sistemleri olacak - spam klasörüne kontrol ettiniz mi?

Bu yüzden değişim etkisi küre ötesinde bir yerde uygulanmış olsa bile, iyi bir deneme sürü gerektirebilir ancak posta sunucusu üzerinden posta yönlendirme, mutlak bir blok olmayabilir çok muhtemeldir.

C.