我怎样才能得到mail()函数的错误信息?
我一直在使用PHP的mail()
函数。
如果邮件因为任何原因没有发送,我想回显错误信息。 我该怎么做?
就像是
$this_mail = mail('example@example.com', 'My Subject', $message); if($this_mail) echo 'sent!'; else echo error_message;
谢谢!
当mail()
返回false时,你可以使用error_get_last()
。
$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的邮件服务器,在php.ini中validation您的“SMTP”和“smtp_port”设置,或者使用ini_set
[file] => C:\ www \ X \ X.php
[line] => 2
在PHP中发送邮件不是一个一步的过程。 mail()返回true / false,但即使返回true,也不表示消息将被发送。 所有的邮件()做的是将消息添加到队列(使用sendmail或任何你在php.ini中设置)
有没有可靠的方法来检查消息是否已在PHP中发送。 您将不得不查看邮件服务器日志。
您可以使用具有相同接口的PEAR邮件程序 ,但在出现问题时会返回PEAR_Error。
没有与mail()
函数关联的错误消息。 电子邮件是否被接受交付只有true
或false
返回。 不是最终是否交付,而是基本上是否存在域名,地址是有效格式的电子邮件地址。
$e=error_get_last(); if($e['message']!==''){ // An error function }
error_get_last(); – 返回发生的最后一个错误
尝试这个。 如果我在任何文件上遇到任何错误,那么我的电子邮件ID上就会收到错误邮件。 创build两个文件index.php
和checkErrorEmail.php
并将它们上传到您的服务器。 然后用你的浏览器加载index.php
。
的index.php
<?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邮件程序,Zend_Mail或phpmailer。