有谁知道如何在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
脚本:/customer.php
[全局错误处理程序]
- >
dec*_*eze 46
这是你能做的最好的事情:
if (!mail(...)) {
// Reschedule for later try or panic appropriately!
}
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/en/function.mail.php
mail()TRUE如果邮件已成功接受传递,FALSE则返回,否则返回.重要的是要注意,仅仅因为邮件被接受传递,并不意味着邮件实际上将到达预定目的地.
如果您需要禁止警告,您可以使用:
if (!@mail(...))
Run Code Online (Sandbox Code Playgroud)
但是在@没有适当检查是否成功的情况下使用操作员时要小心.
如果mail()错误不可克服(很奇怪,但现在无法测试),您可以:
a)暂时关闭错误:
$errLevel = error_reporting(E_ALL ^ E_NOTICE); // suppress NOTICEs
mail(...);
error_reporting($errLevel); // restore old error levels
Run Code Online (Sandbox Code Playgroud)
如果mail()结果太脆弱且不灵活,我会研究b).关闭错误会使调试变得更加困难并且通常是不合适的.
PHPMailer很好地处理错误,也是用于通过SMTP发送邮件的好脚本...
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
Run Code Online (Sandbox Code Playgroud)
使用http://php.net/error_get_last也无法帮助你,因为mail()不会将错误传递给这个函数.
唯一的方法似乎是使用正确的邮件,就像上面已经建议的那样.