Я использовал функцию PHP mail()
.
Если почта по какой-либо причине не отправляется, я хотел бы повторить сообщение об ошибке. Как мне это сделать?
Что-то вроде
$this_mail = mail('example@example.com', 'My Subject', $message); if($this_mail) echo 'sent!'; else echo error_message;
Благодаря!
Вы можете использовать error_get_last()
когда mail()
возвращает false.
$success = mail('example@example.com', 'My Subject', $message); if (!$success) { $errorMessage = error_get_last()['message']; }
С print_r(error_get_last())
вы получаете что-то вроде этого:
[type] => 2
[message] => mail (): Не удалось подключиться к почтовому серверу на порту «xxxx» 25, проверьте настройки «SMTP» и «smtp_port» в php.ini или используйте ini_set ()
[файл] => C: \ www \ X \ X.php
[line] => 2
отправка почты в php не является одношаговым процессом. mail () возвращает true / false, но даже если он возвращает true, это не означает, что сообщение будет отправлено. все mail () это добавляет сообщение в очередь (используя sendmail или все, что вы установили в php.ini)
нет надежного способа проверить, отправлено ли сообщение в php. вам придется просматривать журналы почтового сервера.
Вы можете использовать почтовую программу PEAR , которая имеет тот же интерфейс, но возвращает PEAR_Error при возникновении проблем.
Нет сообщения об ошибке, связанного с функцией mail()
. Существует только true
или false
о том, было ли письмо принято для доставки. Не в конечном итоге он доставлен, но в основном, существует ли домен, а адрес – правильно отформатированный адрес электронной почты.
$e=error_get_last(); if($e['message']!==''){ // An error function }
error_get_last (); – вернуть последнюю ошибку, которая произошла
Попробуй это. Если у меня возникла какая-либо ошибка в любом файле, я получил сообщение об ошибке на моем идентификаторе электронной почты. Создайте два файла index.php
и checkErrorEmail.php
и загрузите их на свой сервер. Затем загрузите index.php
свой браузер.
Index.php
<?php include('checkErrorEmail.php'); include('dereporting.php'); $temp; echo 'hi '.$temp; ?>
в<?php include('checkErrorEmail.php'); include('dereporting.php'); $temp; echo 'hi '.$temp; ?>
в<?php include('checkErrorEmail.php'); include('dereporting.php'); $temp; echo 'hi '.$temp; ?>
checkErrorEmail.php
<?php // Destinations define("ADMIN_EMAIL", "pradeep.callus7@hotmail.com"); //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"); ?>
Как сообщали другие, отслеживания ошибок для отправки почты нет, он возвращает логический результат добавления почты в исходящую очередь. Если вы хотите отслеживать неудачу успешного успеха, попробуйте использовать SMTP с почтовой библиотекой, такой как Swift Mailer, Zend_Mail или phpmailer.