Получить полное сообщение об ошибке из PHPMailer Exception

Я использую класс PHPMailer для отправки почты smtp, но мне нужно отследить журнал из PHPmailerException в таблице MySQL,

Код:

 $mail = new PHPMailer(true);
try {
$mail->Host =$dmmodel->host;
$mail->Username= $dmmodel->username;
$mail->Password= $dmmodel->password;
$mail->Mailer='smtp';
$mail->Port=$dmmodel->port;
$mail->SMTPAuth = true;
$mail->SMTPSecure = ($dmmodel->smtp_enableSSL==1?'ssl':($dmmodel->smtp_enableSSL==2 ? 'tls':''));
$mail->SMTPDebug = 2;
$mail->From = $dmmodel->email_from;
$mail->FromName = $dmmodel->name_from;
$mail->Subject    = $this->getContentBody($docmodel->content_subject,$docmodel->crm_base_contact_id,$_POST["taskid"],$postcode,$recall_by,$recall_dt,true);
$mail->AddAddress($email[$i]);
$mail->IsHTML(true);
}
catch (phpmailerException $e)
{
$msg = "Email Delivery failed -" .  $e->errorMessage();
echo "Email not sent";
}

Где переменная $ msg содержит только сообщение «Ошибка SMTP: не удалось аутентифицироваться»
но когда я ставлю оповещение, я получаю полное сообщение (как показано ниже) причину этой проблемы,

SMTP -> ОТ СЕРВЕРА: 220 smtp.gmail.com ESMTP n3sm27565307paf.13 — gsmtp

SMTP -> ОТ СЕРВЕРА: 250-smtp.gmail.com к вашим услугам, [122.164.189.101] 250-РАЗМЕР 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8

SMTP -> ОШИБКА: пароль не принят с сервера: 535-5.7.8 Имя пользователя и пароль не приняты. Узнайте больше на
535 5,7,8 https://support.google.com/mail/?p=BadCredentials n3sm27565307paf.13 — gsmtp

SMTP -> ОТ СЕРВЕРА: 250 2.1.5 Flushed n3sm27565307paf.13 — gsmtp

Письмо не отправлено

Как я могу сохранить вышеупомянутое сообщение в переменной? Пожалуйста, кто-нибудь может помочь мне получить это полное сообщение

1

Решение

После настройки $mail->SMTPDebug = 2;необходимо создать функцию обратного вызова и назначить ее $mail->Debugoutput, В этой функции вы можете назначить выходные данные отладки переменной. Вот документация на эту тему: http://phpmailer.github.io/PHPMailer/classes/PHPMailer.PHPMailer.PHPMailer.html#property_Debugoutput

Пожалуйста, обратите внимание: Ваша функция обратного вызова будет вызываться один раз на строку вывода отладки (в отличие от однократного для всех выводов отладки в строке ошибки), поэтому вам придется добавлять каждую строку в вашу переменную. Если вы просто назначите его, вы получите только последнюю строку вывода отладки, которая часто является той же самой информацией, которая находится в $ mail-> ErrorInfo или исключении.

Я предпочитаю делать что-то вроде этого:

$GLOBALS['debugOutput'] = [];

$mail->Debugoutput = function($debugOutputLine, $level) {
$GLOBALS['debugOutput'][] = $debugOutputLine;
};

//...Put your mail code here that could cause an error

$debug_output = implode("\n", $GLOBALS['debugOutput']);
echo $debugOutput;

Это должно распечатать ту же информацию, что и в вашем примере.

1

Другие решения

Ты можешь попробовать:

этот:

$mail->SMTPDEbug = 4;

вместо

$mail->SMTPDebug = 2;

Кроме того, вы можете получить больше информации об ошибке с помощью метода

$mail->ErrorInfo,

Например:

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

Это альтернатива модели исключений, которую вам нужно активировать с новым PHPMailer (true).

3

По вопросам рекламы [email protected]