2010-02-24 2 views
25

Weiß jemand, wie kann ich einen Mailfehler (Fehler wird beim Senden von E-Mails angezeigt und der Fehler wird durch den Mailserver verursacht) in PHP abfangen?Wie kann ich einen Fehler finden, der durch mail() verursacht wird?

Fehler, die von email verursacht wurde unten unter:

<!--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

Wie senden Sie E-Mails? Sprechen Sie direkt mit dem SMTP-Server? –

Antwort

42

Hier geht es um das Beste ist, können Sie tun:

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.

Wenn Sie unterdrücken müssen Warnungen können Sie verwenden:

if ([email protected](...)) 

Seien Sie vorsichtig, wenn Sie den Operator @ ohne entsprechende Überprüfung verwenden, ob etwas erfolgreich ist oder nicht.


Wenn mail() Fehler nicht abstellbar sind (komisch, aber kann es jetzt nicht testen), könnten Sie:

a) ausschalten Fehler vorübergehend:

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

b) verwenden ein anderer Mailer, wie von fire und Mike vorgeschlagen.

Wenn mail() sich als zu flockig und unflexibel erweist, würde ich in b) schauen. Das Deaktivieren von Fehlern macht das Debuggen schwieriger und ist im Allgemeinen nicht gut.

+3

+1 Gute Antwort. Oft vergessen die Leute, dass 'mail()' 'bool' zurückgibt. Gut, dass Sie auf die Annahme "Wenn kein Fehler, die Mail angekommen ist" verwiesen haben, da dies auch bei neuen Entwicklern ein häufiges Missverständnis ist. – Sampson

+0

Hallo deceze, ich verstehe, dass mail() wahr oder falsch zurückgibt.Aber unbekannter Grund, dies zeigt immer die Fehlermeldung auf meiner Seite (die die Fehlermeldung auf meine Frage oben zeigen und der Fehler nur anzeigen, wenn ich den Quellcode von der Seite anzeigen): und dieser Fehler hat mich unfähig gemacht Umleiten (header()) meiner Seite auf die neue Seite. Ich suche den Code, kann aber nicht herausfinden, wo dieser Fehler tatsächlich angezeigt wird. Vielleicht ist dies in der Php Bmp Einstellung eingestellt? –

+0

Meine Frage ist ... wie kann ich ignorieren oder werfen "Fehler beim Verbinden mit Mailserver" Fehlermeldung aus meiner Seitenüberschrift? Hat jemand eine Idee, wie es geht? Ich suchte in Google herum, konnte aber immer noch nicht die Lösung finden –

1

Sie könnten die PEAR Mail Klassen und Methoden verwenden, die Sie auf Fehler über überprüfen können:

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

können Sie ein Beispiel here finden.

6

PHPMailer behandeln Fehler schön, auch ein gutes Drehbuch für E-Mail über SMTP ...

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

Eigentlich denke ich, es ist ein Fehler, wenn Sie die Ausnahme Eigenschaft nicht auf True – AntonioCS

+0

Ich tauchte in seinen Code und es verwendet nur temporären 'abgesicherten Modus' + @ Mail(), um Fehler zu behandeln. –

4

auch http://php.net/error_get_last mit Senden zu verwenden, werden Ihnen nicht helfen, weil Mail() nicht seine Fehler in diesen nicht Emmit Funktion.

Nur scheint, einen richtigen Mailer zu verwenden, wie oben bereits vorgeschlagen.

+2

Diese Behauptung scheint einen gewissen Wert zu haben, "mail" gibt für mich den Wert false zurück, aber "error_get_last" ist null. – yoshi

Verwandte Themen