Обработка ошибок с помощью PHPMailer

Я пытаюсь использовать PHPMailer для небольшого проекта, но я немного запутался в обработке ошибок с помощью этого программного обеспечения. Надеюсь, что у кого-то есть опыт. Когда я настроил электронную почту, и я использую:

$result = $mail->Send(); if(!$result) { // There was an error // Do some error handling things here } else { echo "Email successful"; } 

Который работает отлично, более или менее. Проблема в том, что есть ошибка, PHPMailer также, похоже, повторяет ошибку, поэтому, если есть проблема, она просто отправляет эту информацию непосредственно в браузер, по сути, нарушая любую обработку ошибок, которую я пытаюсь сделать.

Есть ли способ заставить замолчать эти сообщения? Он не бросает исключение, просто распечатывает ошибку, которая в моем тестовом примере:

 invalid address: @invalid@email You must provide at least one recipient email address. 

Он должен быть ошибкой, но он должен находиться в $ mail-> ErrorInfo; не будучи эхо-программным обеспечением.

PHPMAiler использует Исключения. Попробуйте принять следующий код :

 require_once '../class.phpmailer.php'; $mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch try { $mail->AddReplyTo('name@yourdomain.com', 'First Last'); $mail->AddAddress('whoto@otherdomain.com', 'John Doe'); $mail->SetFrom('name@yourdomain.com', 'First Last'); $mail->AddReplyTo('name@yourdomain.com', 'First Last'); $mail->Subject = 'PHPMailer Test Subject via mail(), advanced'; $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically $mail->MsgHTML(file_get_contents('contents.html')); $mail->AddAttachment('images/phpmailer.gif'); // attachment $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment $mail->Send(); echo "Message Sent OK\n"; } catch (phpmailerException $e) { echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { echo $e->getMessage(); //Boring error messages from anything else! } 

Просто нужно было это исправить. Вышеприведенные ответы, похоже, не учитывают $mail->SMTPDebug = 0; вариант. Возможно, он не был доступен, когда вопрос был задан первым.

Если вы получили свой код с сайта PHPMail, по умолчанию будет $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPDebug = 2; // enables SMTP debug information (for testing)

https://github.com/Synchro/PHPMailer/blob/master/examples/test_smtp_gmail_advanced.php

Установите значение 0 для подавления ошибок и отредактируйте часть «catch» вашего кода, как описано выше.

Пожалуйста, обратите внимание!!! Вы должны использовать следующий формат при создании PHPMailer!

 $mail = new PHPMailer(true); 

Если вы не делаете исключений, игнорируются, и единственное, что вы получите, – это эхо от рутины! Я знаю, что это хорошо после того, как это было создано, но, надеюсь, это поможет кому-то.

Вы можете получить дополнительную информацию об ошибке с помощью метода $mail->ErrorInfo . Например:

 if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; } 

Это альтернатива модели исключения, которую нужно активировать с помощью new PHPMailer(true) . Но если можно использовать модель исключения, используйте ее как @Phil Rykoff.

Это происходит с главной страницы PHPMailer по github https://github.com/PHPMailer/PHPMailer .

Мы написали класс-оболочку, который захватывает буфер и преобразует печатный результат в исключение. это позволяет нам обновлять файл phpmailer, не задумываясь о том, чтобы комментировать события echo при каждом обновлении.

Класс-оболочка имеет методы:

 public function AddAddress($email, $name = null) { ob_start(); parent::AddAddress($email, $name); $error = ob_get_contents(); ob_end_clean(); if( !empty($error) ) { throw new Exception($error); } } 

Даже если вы используете исключения, он все равно выводит ошибки.
Вы должны установить $ MailerDebug в False, который должен выглядеть так

 $mail = new PHPMailer(); $mail->MailerDebug = false; 

Это прекрасно работает

 use try { as above use Catch as above but comment out the echo lines } catch (phpmailerException $e) { //echo $e->errorMessage(); //Pretty error messages from PHPMailer } catch (Exception $e) { //echo $e->getMessage(); //Boring error messages from anything else! } 

Затем добавьте это

 if ($e) { //enter yor error message or redirect the user } else { //do something else } 

В PHPMailer.php есть строки, как показано ниже:

 echo $e->getMessage() 

Просто прокомментируйте эти строки, и вам будет хорошо идти.

 $mail = new PHPMailer(); $mail->AddAddress($email); $mail->From = $from; $mail->Subject = $subject; $mail->Body = $body; if($mail->Send()){ echo 'Email Successfully Sent!'; }else{ echo 'Email Sending Failed!'; } 

самый простой способ обработки электронной почты успешно или неудачно …