Я использую PHPMailer;
$oPM->SMTPDebug = 2; $oPM->Debugoutput = 'html'; if ( !$oPM->send() ) echo "Mailer Error: " . $oPM->ErrorInfo; else echo "Message sent!";
После $oPM->Send()
я хотел бы получить код состояния SMTP, независимо от успеха / сбоя.
Играя с параметром SMTPDebug
, я могу заставить его вернуть строку;
MAIL FROM command failed: 500 5.0.0 Envelope From Address of...
Я мог бы взять код из строки. Но действительно хотелось бы вернуть фактический код.
Возможно ли это, или я должен идти по маршруту strpos? Благодаря!
Вы не получите SMTP-код непосредственно из send()
потому что PHPMailer не обязательно использует SMTP. Выход SMTPDebug
не предназначен для использования в производстве; $mail->ErrorInfo
сообщение об ошибке появится в $mail->ErrorInfo
. Вы можете получить более точную информацию из экземпляра SMTP после вызова send
:
$mail->getSMTPInstance()->getError();
который возвращает такую структуру:
[ 'error' => '', 'detail' => '', 'smtp_code' => '', 'smtp_code_ex' => '' ]
Кстати, ошибка 5.0.0, встроенная в ваш пример, совершенно бесполезна для диагностических целей – все это означает, что «это не сработало». К сожалению, вы обнаружите, что многие почтовые серверы являются просто мусором для правильной отправки сообщений об ошибках, особенно Exchange, поэтому, если вы хотите быть более точными, вы будете разбирать строки.