有没有人知道如何在php中捕获邮件错误(在发送电子邮件时显示错误并且错误是由邮件服务器关闭引起的)?
由于电子邮件服务器故障导致的错误如下:
<! - 2010-02-24T14:26:43 + 11:00注意(5):意外错误:mail()[< a href ='function.mail'> function.mail< / a>]:无法连接到“ip”端口portip的邮件服务器,验证php.ini中的“SMTP”和“smtp_port”设置或使用ini_set()(#2)。
2010-02-24 14:26:43
用户名:admin
文件D的第439行出错:\ test.php
脚本:/comeromer.php
[全局错误处理程序]
- >
答案 0 :(得分:44)
这是你能做的最好的事情:
if (!mail(...)) {
// Reschedule for later try or panic appropriately!
}
http://php.net/manual/en/function.mail.php
如果邮件已成功接受传递,则
mail()
会返回TRUE
,否则会返回FALSE
。重要的是要注意,仅仅因为邮件已被接受发送,并不意味着邮件实际上会到达目的地。
如果您需要禁止警告,可以使用:
if (!@mail(...))
在没有适当检查是否成功的情况下使用@
运算符时要小心。
如果mail()
错误无法抑制(很奇怪,但现在无法测试),您可以:
a)暂时关闭错误:
$errLevel = error_reporting(E_ALL ^ E_NOTICE); // suppress NOTICEs
mail(...);
error_reporting($errLevel); // restore old error levels
如果mail()
过于片面且不灵活,我会调查b)。关闭错误会使调试变得更加困难,并且通常是不合适的。
答案 1 :(得分:6)
PHPMailer很好地处理错误,也是用于通过SMTP发送邮件的好脚本......
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
答案 2 :(得分:5)
同样使用http://php.net/error_get_last也无法帮助你,因为mail()不会将错误发送到此函数中。
似乎只使用了正确的邮件,如上所述。
答案 3 :(得分:2)
根据http://php.net/manual/en/function.error-get-last.php,使用:
print_r(error_get_last());
将返回生成的最后一个错误的数组。您可以访问[message]
元素以显示错误。
答案 4 :(得分:1)