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