Php 如何捕获由mail()引起的错误?

Php 如何捕获由mail()引起的错误?,php,email,Php,Email,有人知道如何在php中捕获邮件错误(发送电子邮件时显示错误,错误是由邮件服务器关闭引起的)吗 emailserver关闭导致的错误如下: 这是你能做的最好的事情: if (!mail(...)) { // Reschedule for later try or panic appropriately! } mail()返回TRUE如果邮件被成功接受投递,则返回FALSE 重要的是要注意,仅仅因为邮件被接受交付,并不意味着邮件将实际到达预定目的地 如果需要抑制警告,可以使用: if (

有人知道如何在php中捕获邮件错误(发送电子邮件时显示错误,错误是由邮件服务器关闭引起的)吗

emailserver关闭导致的错误如下:


这是你能做的最好的事情:

if (!mail(...)) {
   // Reschedule for later try or panic appropriately!
}

mail()
返回
TRUE
如果邮件被成功接受投递,则返回
FALSE

重要的是要注意,仅仅因为邮件被接受交付,并不意味着邮件将实际到达预定目的地

如果需要抑制警告,可以使用:

if (!@mail(...))
但是,在没有适当检查某件事情是否成功的情况下使用操作员时要小心


如果
mail()

a) 暂时关闭错误:

$errLevel = error_reporting(E_ALL ^ E_NOTICE);  // suppress NOTICEs
mail(...);
error_reporting($errLevel);  // restore old error levels
b) 根据和的建议,使用不同的邮件发送程序

如果
mail()
变得过于脆弱和僵化,我会考虑b)。关闭错误会使调试更加困难,而且通常是不好的。

您可以使用类和方法,它允许您通过以下方式检查错误:

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

”; }否则{ echo(消息已成功发送!

); }

您可以找到一个示例。

PHPMailer可以很好地处理错误,这也是一个通过SMTP发送邮件的好脚本

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
另外,使用也不会帮助您,因为mail()不会将其错误写入此函数

唯一的方法似乎是使用一个合适的邮箱,就像上面建议的那样。

根据,使用:


它将返回最后生成的错误的数组。您可以访问
[message]
元素以显示错误。

如何发送邮件?你是直接和SMTP服务器通话吗?+1回答得好。人们常常忘记
mail()
返回
bool
。很好,您也引用了“如果没有错误,邮件到达”的假设,因为这也是新开发人员常见的误解。嗨,deceze,我知道mail()将返回true或false。但是未知原因,这总是在我的页面上显示错误消息(上面的问题上显示了错误消息,并且只有在我查看页面上的源代码时才能查看错误):并且此错误导致我无法将(header())我的页面重定向到新页面。我已经搜索了代码,但无法找到实际显示此错误的位置。也许这是在php stmp设置中设置的?我的问题是。。。如何从页面标题中忽略或抛出此“无法连接到邮件服务器”错误消息?有人知道怎么做吗?我一直在谷歌搜索,但仍然找不到解决方案非常感谢你为我工作。人们需要注意的一件事是正确设置标题$标题='发件人:'。$email。“\r\n”。”答复:"$电子邮件。“\r\n”。”X-Mailer:PHP/”。phpversion();邮件($email_to、$subject、$message、$headers);事实上,我认为如果您没有将exception属性设置为True,它会回显一个错误。我深入到它的代码中,它只是使用临时的“安全模式”+@mail()来处理错误。这个声明似乎有一些价值,
mail
为我返回false,但
error\u get\u last
为null。这不是根据手册,但根据手册中的注释,它确实是误导性的,永远不要使用它。最后一个错误可能是代码中某个地方的弃用通知,它不会中断执行,特别是在生产环境中,如果设置正确。
print_r(error_get_last());