2016-04-19 15 views
2

私はPHPMailerを使用しています。PHPMailer、返信SMTPコード

$oPM->SMTPDebug = 2; 
$oPM->Debugoutput = 'html'; 

if (!$oPM->send()) echo "Mailer Error: " . $oPM->ErrorInfo; 
else echo "Message sent!"; 

$oPM->Send()が走っていたら、私は関係なく、成功/失敗の、SMTPステータスコードをreciveしたいと思います。

オプションSMTPDebugで再生すると、それ以降のように文字列を返すことができます。

MAIL FROM command failed: 500 5.0.0 Envelope From Address of...

私は、文字列からコードをつかむことができました。しかし、実際のコードを返すのが本当に好きです。

これが可能ですか、または私はstrposルートを下りますか?ありがとう!

答えて

2

send()から直接SMTPコードを取得することはありません。なぜなら、PHPMailerは必ずしもSMTPを使用していないからです。 SMTPDebug出力は本番用ではありません。読み取り可能なエラーメッセージは$mail->ErrorInfoになります。あなたはsendを呼び出した後にSMTPインスタンスからより正確な情報を取得することができます。このような構造体を返し

$mail->getSMTPInstance()->getError(); 

を:

[ 
    'error' => '', 
    'detail' => '', 
    'smtp_code' => '', 
    'smtp_code_ex' => '' 
] 

ところで、あなたの例に埋め込ま5.0.0エラーがために完全に役に立ちません診断目的 - すべてが意味するのは「うまくいかない」ということです。残念なことに、多くのメールサーバーは、特にExchangeなどのエラーを正しく報告するにはゴミだけなので、より正確にするには、解析文字列が終了することになります。

+1

本当に素晴らしい答えに感謝します。ポイントは応答コードのみを使用することに注意した。私は失敗時に 'detail' + 'smtp_code'の両方を保存します。再度、感謝します! – atoms

関連する問題