禁用PHPMailer错误消息

时间:2011-01-25 20:32:14

标签: php email phpmailer

如何禁用PHPMailer类的错误消息?我正在显示自己的错误消息,我不希望用户看到“SMTP错误:无法连接到SMTP主机”等错误。

我的代码:http://pastie.org/1497819

由于

10 个答案:

答案 0 :(得分:26)

我知道这个帖子已经老了并且已经回答了,但我在这里偶然发现是因为我遇到了同样的问题,但最终却以不同的方式解决它,所以我想我会分享。注意:我正在使用PHPMailer v5.1。

当您实例化PHPMailer类时,它需要一个可选参数$ exceptions。这告诉PHPMailer它是否应该在遇到异常时抛出异常。它默认为false,这意味着它不会抛出任何异常,只是回显它的消息。但是,如果你称之为

  $mail = new PHPMailer(true);

你会告诉它抛出异常。然后,您可以捕获这些异常并按照您的选择处理它们。对我来说,这比弄乱源代码或禁用错误报告更清晰,更优雅。

答案 1 :(得分:12)

这是PHPMailer希望你这样做的方式;不涉及编辑原始类文件。

$mail->SMTPDebug = false;
$mail->do_debug = 0;

答案 2 :(得分:3)

这可能不是最佳解决方案,但它确实有效。

在你的phpmailer库文件夹中打开“class.phpmailer.php”,

查找

public function Send()

在里面评论该行

echo $e->getMessage()."\n";

答案 3 :(得分:2)

有一个更好的解决方案(我认为:)),它是Riccardo提取的解决方案的改进版本

在文件“class.phpmailer.php”中,在函数

public function Send()

找到行

echo $e->getMessage()."\n";

并替换它

if ($SMTPDebug)
   echo $e->getMessage()."\n";

这样,如果您在调试模式下运行,它只会显示异常消息(或错误消息)。

希望它有所帮助!! 问候!!

答案 4 :(得分:2)

这是另一种解决方案:

ob_start(); //start output buffering to capture all output and prevent errors from being displayed
$delivery = $mail->Send();
ob_end_clean(); //erase the buffer and stop output buffering

我需要在Joomla中使用JMtility :: sendMail函数来抑制错误,它在幕后使用PHPMailer,所以上面的答案对我不起作用,但输出缓冲就行了。

答案 5 :(得分:2)

//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;

答案 6 :(得分:1)

有两种工作方式与2019年11月几乎相同

$mail->SMTPDebug = 0;

OR 

$mail->SMTPDebug = false;

答案 7 :(得分:0)

如果错误来自对$mail->Send();的调用,那么您可以执行以下操作:

$oldErrorSetting = error_reporting(0); // temporarily disable warnings
$delivery = $mail->Send();
error_reporting($oldErrorSetting); // restore error setting

这将抑制来自发送呼叫的PHP错误。

然后,要获取PHPMailer的错误并对它们做些好事,您可以使用$delivery返回值和ErrorInfo

if (!$delivery) {
    $errorDetails = $mail->ErrorInfo;
    print "<p>$errorDetails</p>\n";
}

答案 8 :(得分:0)

我遇到错误问题:无法修改标头信息 - 已经发送的标头(输出从/phpMailer/class.phpmailer.php开始)因为我的返回json需要标题(&#39;内容-Type:application / json&#39;);而且是因为类class.phpmailer.php在屏幕上打印出错误无效地址:这会产生标题的错误所以解决它很简单,它只包含在类class.phpmailer.php中的以下行调试检查和它的工作完全遵循

这一行

Echo $ this-> Lang ('invalid_address'). ':'. $ Address;

更改为:

If ($ this-> SMTPDebug) {
       Echo $ this-> Lang ('invalid_address'). ':'. $ Address;
  }

答案 9 :(得分:0)

删除以下代码(如果包含)

$mail->SMTPDebug = SMTP::DEBUG_SERVER;