2010-02-24 20 views
25

Bir posta hatasını (e-posta gönderilirken hata ve e-posta gönderilirken hata neden olur) php'de nasıl yakalandığını bilen var mı? Emailserver aşağı neden olduPosta() nedeniyle oluşan bir hatayı nasıl yakalarım?

Hata aşağıdaki gibidir:

if (!mail(...)) { 
    // Reschedule for later try or panic appropriately! 
} 

http://php.net/manual/en/function.mail.php

mail() returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.

It is important to note that just because the mail was accepted for delivery, it does NOT mean the mail will actually reach the intended destination.

sen bastırmak için gerekirse:

<!--2010-02-24T14:26:43+11:00 NOTICE (5): Unexpected Error: mail() [<a href='function.mail'>function.mail</a>]: Failed to connect to mailserver at "ip " port portip, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() (# 2).
2010-02-24 14:26:43
Username: admin
Error in line 439 of file D:\test.php
Script: /customer.php
[Global Error Handler]
-->

+1

Postaları nasıl gönderirsiniz? SMTP sunucusuyla doğrudan konuşuyor musunuz? –

cevap

42

Bu yapabileceğiniz en iyi hakkındadır uyarılar, kullanabilirsiniz:

Dikkat edin çünkü bir şey başarılı olup olmadığı veya olmasın gibi uygun kontroller olmadan @ operatörü kullanmayla ilgili. mail() hataları Baskılanabilen değildir (garip, ama şu anda bunu test edemez) ise


, yapabilirsin:

a) geçici hataları kapatın:

$errLevel = error_reporting(E_ALL^E_NOTICE); // suppress NOTICEs 
mail(...); 
error_reporting($errLevel); // restore old error levels 

b) kullanan fire ve Mike tarafından önerilen farklı bir postacı.

mail() çok pul pul ve esnek değilse, b) içine bakarım. Hataların giderilmesi, hata ayıklamayı daha da zorlaştırıyor ve genel olarak ungood'dur. Bir örneği here bulabilirsiniz

if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
} else { 
    echo("<p>Message successfully sent!</p>"); 
} 

:

+3

+1 İyi cevap. Çoğu zaman insanlar 'mail()' 'bool' döndürdüğünü unuturlar. İyi de, "hata yoksa, posta geldi" varsayımına da atıfta bulunmuşsunuzdur, çünkü bu da yeni geliştiriciler arasında yaygın bir yanlış anlamadır. – Sampson

+0

Merhaba deceze, posta() 'nın doğru veya yanlış döndüğünü anlıyorum.Ancak bilinmeyen bir nedenden dolayı, bu her zaman hata iletisini sayfamda gösteriyor (bu, yukarıdaki sorudaki hata iletisinin gösterdiği hata ve kaynak kodunu sayfadan görüntülediğimde yalnızca hata görebiliyor): ve bu hata bana neden oldu sayfamı yeni sayfaya yönlendirmek için (header()). Kodun etrafında arama yaptım ancak bu hatayı gerçekten nerede görüntüleyemiyorum. Belki bu php stmp ayarında ayarlanır? –

+0

Sorum şu: ... sayfa başlığımdan "Posta sunucusuna bağlanılamadı" hata mesajını nasıl görmezden gelebilirim? Herkesin nasıl yapılacağı hakkında bir fikri var mı? Google'da arama yaptım ama yine de çözümü bulamıyordum –

1

Sen aracılığıyla hatalarını kontrol olanak veren PEAR Mail sınıfları ve yöntemleri kullanabilirsiniz.

6

PHPMailer da, güzel SMTP aracılığıyla posta göndermek için kullanmak iyi bir senaryo ... hatalarını işleme

if(!$mail->Send()) { 
    echo "Mailer Error: " . $mail->ErrorInfo; 
} else { 
    echo "Message sent!"; 
} 
+0

Aslında, özel olarak – AntonioCS

+0

özel kodunu kendi koduna koymadım ve hataları işlemek için yalnızca geçici 'safe mode' + @mail() kullanırsanız bir hatayı yankılanıyor sanırım. –

3

kullanın: Geçen hatasının bir dizi döndürür

print_r(error_get_last()); 

üretti. Hatayı görüntülemek için [message] öğesine erişebilirsiniz.

İlgili konular