Ich habe die PHP- mail()
Funktion verwendet.
Wenn die E-Mail aus irgendeinem Grund nicht gesendet wird, möchte ich die Fehlermeldung wiederholen. Wie würde ich das machen?
Etwas wie
$this_mail = mail('[email protected]', 'My Subject', $message);
if($this_mail) echo 'sent!';
else echo error_message;
Vielen Dank!
error_get_last()
RückkehrNULL
!! Die Mail-Funktion gibt jedoch true zurück!Das Senden von E-Mails in PHP ist kein einstufiger Prozess. mail () gibt true / false zurück, aber selbst wenn es true zurückgibt, bedeutet dies nicht, dass die Nachricht gesendet wird. Alles, was mail () tut, ist, die Nachricht zur Warteschlange hinzuzufügen (mit sendmail oder was auch immer Sie in php.ini festgelegt haben)
Es gibt keine zuverlässige Möglichkeit zu überprüfen, ob die Nachricht in PHP gesendet wurde. Sie müssen die Mailserver-Protokolle durchsuchen.
quelle
In meinem Fall konnte ich die Fehlermeldung in meinem PHP-Skript nicht erhalten, egal was ich tue (
error_get_last()
oderini_set('display_errors',1);
), die Fehlermeldung wird nicht angezeigtnach diesem Beitrag
Ich dies bestätigen , weil nach einigen gescheiterten Versuchen zur Verwendung
mail()
in meinem PHP - Skripte, stellt sie dassendmail
nicht auf meinem Rechner installiert wurde, aber die php.ini Variablesendmail_path
war/usr/sbin/sendmail -t -i
1- Ich habe sendmail von meinem Paketmanager installiert
shell> dnf install sendmail
2- Ich habe es angefangen
shell> service sendmail start
3- Wenn nun eine PHP-
mail()
Funktion fehlschlägt, finde ich die Fehler dessendmail
unter/var/mail/
Verzeichnis protokollierten Programms . 1 Datei pro BenutzerZum Beispiel wird dieses Snippet aus meiner
/var/mail/root
Datei entnommenThe original message was received at Sun, 29 Jul 2018 22:37:51 +0200 from localhost [127.0.0.1] ----- The following addresses had permanent fatal errors ----- <[email protected]> (reason: 550 Host unknown)
Mein System ist Linux Fedora 28 mit Apache2.4 und PHP 7.2
quelle
Sie können den PEAR-Mailer verwenden , der dieselbe Schnittstelle hat, aber bei Problemen einen PEAR_Error zurückgibt.
quelle
Der
mail()
Funktion ist keine Fehlermeldung zugeordnet . Es gibt nur einetrue
oder einefalse
Rückgabe, ob die E-Mail zur Zustellung angenommen wurde. Nicht, ob es letztendlich zugestellt wird, sondern ob die Domain existiert und die Adresse eine gültig formatierte E-Mail-Adresse ist.quelle
$e=error_get_last(); if($e['message']!==''){ // An error function }
error_get_last (); - den zuletzt aufgetretenen Fehler zurückgeben
quelle
Wie die anderen gesagt haben, gibt es keine Fehlerverfolgung für das Senden von E-Mails. Es gibt das boolesche Ergebnis des Hinzufügens der E-Mails zur ausgehenden Warteschlange zurück. Wenn Sie einen echten Erfolgsfehler verfolgen möchten, verwenden Sie SMTP mit einer E-Mail-Bibliothek wie Swift Mailer, Zend_Mail oder phpmailer.
quelle
Versuche dies. Wenn ich einen Fehler in einer Datei habe, habe ich eine Fehlermail in meiner E-Mail-ID erhalten. Erstellen Sie zwei Dateien
index.php
undcheckErrorEmail.php
laden Sie sie auf Ihren Server hoch. Laden Sie dannindex.php
mit Ihrem Browser.Index.php
<?php include('checkErrorEmail.php'); include('dereporting.php'); $temp; echo 'hi '.$temp; ?>
checkErrorEmail.php
<?php // Destinations define("ADMIN_EMAIL", "[email protected]"); //define("LOG_FILE", "/my/home/errors.log"); // Destination types define("DEST_EMAIL", "1"); //define("DEST_LOGFILE", "3"); /* Examples */ // Send an e-mail to the administrator //error_log("Fix me!", DEST_EMAIL, ADMIN_EMAIL); // Write the error to our log file //error_log("Error", DEST_LOGFILE, LOG_FILE); /** * my_error_handler($errno, $errstr, $errfile, $errline) * * Author(s): thanosb, ddonahue * Date: May 11, 2008 * * custom error handler * * Parameters: * $errno: Error level * $errstr: Error message * $errfile: File in which the error was raised * $errline: Line at which the error occurred */ function my_error_handler($errno, $errstr, $errfile, $errline) { echo "<br><br><br><br>errno ".$errno.",<br>errstr ".$errstr.",<br>errfile ".$errfile.",<br>errline ".$errline; if($errno) { error_log("Error: $errstr \n error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL); } /*switch ($errno) { case E_USER_ERROR: // Send an e-mail to the administrator error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL); // Write the error to our log file //error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_LOGFILE, LOG_FILE); break; case E_USER_WARNING: // Write the error to our log file //error_log("Warning: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); break; case E_USER_NOTICE: // Write the error to our log file // error_log("Notice: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); break; default: // Write the error to our log file //error_log("Unknown error [#$errno]: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); break; }*/ // Don't execute PHP's internal error handler return TRUE; } // Use set_error_handler() to tell PHP to use our method $old_error_handler = set_error_handler("my_error_handler"); ?>
quelle