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

2022-08-30 15:09:56

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

由电子邮件服务器关闭引起的错误如下:

<!--2010-02-24T14:26:43+11:00 注意 (5): 意外错误: mail() [<a href='function.mail'>function.mail</a>]: 无法连接到邮件服务器在“ip”端口 portip,验证 php 中的“SMTP”和“smtp_port”设置.ini或使用 ini_set() (# 2)。
2010-02-24 14:26:43
用户名: admin
文件 D:\test 第 439 行出现错误.php
脚本: /customer.php
[全局错误处理程序]
-->


答案 1

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

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

http://php.net/manual/en/function.mail.php

mail()如果邮件已成功接受递送,则返回,否则。TRUEFALSE

重要的是要注意,仅仅因为邮件被接受传递,并不意味着邮件实际上会到达预期的目的地。

如果需要禁止显示警告,可以使用:

if (!@mail(...))

但是,在不使用 @ 运算符时要小心,不要对某些操作是否成功进行适当的检查。


如果错误不可抑制(奇怪,但现在无法测试),您可以:mail()

a) 暂时关闭错误:

$errLevel = error_reporting(E_ALL ^ E_NOTICE);  // suppress NOTICEs
mail(...);
error_reporting($errLevel);  // restore old error levels

b)按照fireMike的建议使用不同的邮件。

如果事实证明太不可靠和不灵活,我会研究b)。关闭错误会使调试更加困难,并且通常不正常。mail()


答案 2

PHPMailer很好地处理错误,也是一个很好的脚本,用于通过SMTP发送邮件...

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

推荐