我怎样才能得到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()函数关联的错误消息。 电子邮件是否被接受交付只有truefalse返回。 不是最终是否交付,而是基本上是否存在域名,地址是有效格式的电子邮件地址。

 $e=error_get_last(); if($e['message']!==''){ // An error function } 

error_get_last(); – 返回发生的最后一个错误

尝试这个。 如果我在任何文件上遇到任何错误,那么我的电子邮件ID上就会收到错误邮件。 创build两个文件index.phpcheckErrorEmail.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。