Отключить сообщения об ошибках PHPMailer - PullRequest
6 голосов
/ 25 января 2011

Как отключить сообщения об ошибках из класса PHPMailer?Я показываю свои собственные сообщения об ошибках и не хочу, чтобы пользователи видели такие ошибки, как «Ошибка SMTP: не удалось подключиться к узлу SMTP».

Мой код: http://pastie.org/1497819

Спасибо

Ответы [ 8 ]

26 голосов
/ 02 августа 2011

Я знаю, что эта ветка старая и уже отвечала, но я наткнулся здесь, потому что у меня была та же проблема, но я решил ее по-другому, поэтому я решил поделиться.ПРИМЕЧАНИЕ: я использую PHPMailer v5.1.

Когда вы создаете экземпляр класса PHPMailer, он принимает один необязательный аргумент - $ exceptions.Это говорит PHPMailer, если он должен генерировать исключения, если он встречается.По умолчанию используется значение false, что означает, что оно не выдает никаких исключений, а просто выводит его сообщения.Однако, если вы назовете это как

  $mail = new PHPMailer(true);

, вы скажете, что он будет генерировать исключения.Затем вы можете поймать эти исключения и обработать их по своему усмотрению.Для меня это намного чище и элегантнее, чем возиться с исходным кодом или отключать отчеты об ошибках.

12 голосов
/ 12 сентября 2012

Именно так PHPMailer хочет, чтобы вы это делали;не включает редактирование исходного файла класса.

$mail->SMTPDebug = false;
$mail->do_debug = 0;
3 голосов
/ 15 февраля 2011

Возможно, это не лучшее решение, но оно работает.

В папке вашей библиотеки phpmailer откройте "class.phpmailer.php",

find

public function Send()

внутри него прокомментируйте строку

echo $e->getMessage()."\n";
2 голосов
/ 05 ноября 2015
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
2 голосов
/ 03 марта 2012

Вот еще одно решение:

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

Мне нужно было подавлять ошибки из функции JUtility :: sendMail в Joomla, которая за кулисами использует PHPMailer, поэтому приведенные выше ответы не сработали, но выходная буферизация сработала.

2 голосов
/ 21 января 2012

Есть лучшее решение (я думаю :)), это улучшенная версия решения, предложенного Riccardo

В файле "class.phpmailer.php", внутри функции

public function Send()

найдите строку

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

и замените ее на эту

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

Таким образом, она будет показывать только сообщения об исключениях (или сообщения об ошибках), если вы работаете врежим отладки ..

Надеюсь, это поможет!привет !!

0 голосов
/ 23 декабря 2016

У меня проблема с ошибкой: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с /phpMailer/class.phpmailer.php), потому что мой возвращаемый json нуждается в заголовке ('Content-Type: application / JSON '); И выдавал ошибку, потому что класс class.phpmailer.php напечатал на экране ошибку Invalid address: которая генерирует ошибку заголовка, так что решить ее было просто, она включается только в класс class.phpmailer.php в следующей строке отладочная проверка и все заработало отлично следует

Эта строка

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

Изменить на:

If ($ this-> SMTPDebug) {
       Echo $ this-> Lang ('invalid_address'). ':'. $ Address;
  }
0 голосов
/ 26 января 2011

Если ошибки поступают из вызова на $mail->Send();, то вы можете сделать что-то вроде этого:

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

Это будет подавлять ошибки PHP, возникающие при вызове Send.

Затем, чтобы получить ошибки PHPMailer и сделать с ними что-то приятное, вы можете использовать возвращаемое значение $delivery и ErrorInfo:

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