2011-01-25 2 views
5

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

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

Благодаря

+0

PHPMailer имеет 'verbose' свойство. У меня нет копии, поэтому я не могу проверить точное имя, но это было что-то в этом роде - проверьте верхнюю часть файла класса, он должен быть там –

+0

Я нашел $ ErrorInfo, но это не имеет значения если я прокомментирую строку. Сообщения об ошибках. – Richard

ответ

3

Это, вероятно, не самое лучшее решение, но это работает.

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

найти

public function Send() 

внутри него комментарии линии

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

$ mail-> SMTPDebug = 0; остановит все предупреждение/уведомление – Sunit

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"; 
} 
+0

Я не могу заставить его работать, я должен что-то делать неправильно, я пытался реализовать свой код, но не повезло. Для моего исходного кода см. Http://pastie.org/1497819. – Richard

23

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

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

$mail = new PHPMailer(true); 

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

+0

Это лучший ответ ИМО, благодаря веревке. –

+0

Это лучший ответ. Согласовано. – CaptSaltyJack

2

Там лучшее решение (я думаю :)), это улучшенная версия решения мотивационные Риккардо

В файле «class.phpmailer.php», в функции

public function Send() 

найти линии

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

и заменить его на этот

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

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

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

+1

Вам следует избегать редактирования файла class.phpmailer.php. Делает для сложных обновлений в будущем. – Susan

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 

мне нужно подавить ошибки от JUtility :: функции Sendmail в Joomla, который использует PHPMailer за кулисами, так что приведенные выше ответы не работают для меня, но буферизации вывода сделал трюк.

9

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

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

В целях тестирования я отключил свой почтовый сервер, и хотя я ввел эти строки \t $ mail = new PHPMailer (false); \t \t $ mail-> SMTPDebug = 0; \t \t $ mail-> do_debug = 0; Я все еще получаю строку, которая появляется в консоли, говоря «Невозможно создать почтовую функцию». Очень раздражает, поскольку он останавливает мой код json, возвращаясь к jQuery –

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

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

Эта линия

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

Изменить на:

If ($ this-> SMTPDebug) { 
       Echo $ this-> Lang ('invalid_address'). ':'. $ Address; 
  } 
Смежные вопросы