答案 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;