faillogに記録された配送失敗理由として“354 End data with <CR><LF>.<CR><LF>”があるが、これは何を意味するか new!

faillogに記録された配送失敗理由として“354 End data with <CR><LF>.<CR><LF>”があるが、これは何を意味するかという質問を受けたことがあります。

通常ではfaillog(配送失敗ログ)に記録されない300番台
faillog(配送失敗ログ)の右端には、その配送セッションで相手側から帰ってきた“最後のSMTP応答コード”が記録されます。
通常、faillogは配送失敗したもののみが記録されるログなので、500番台の永続的エラー、400番台の一時的エラー、名前解決やサーバ無応答などの“失敗理由”が記録されます。
しかし、今回は354番なので300番台の意味である、成功・中間応答を示します。もう少し詳しく言うと、「コマンドは受け付けたが、追加情報待ちで保留している」という意味です。
つまり、今回の“354 End data with <CR><LF>.<CR><LF>”はエラー応答ではないということになります。

インターネット通信規格RFC(SMTP RFC 5321)で説明されている応答コード3桁目の意味
“354 End data with <CR><LF>.<CR><LF>”の意味
SMTPでは、送信側がDATAコマンドを送った後、相手側が本文受信を許可すると、354を返します。
この354は「本文データを送ってよい。本文の終端は<CR><LF>.<CR><LF>で送れ」という意味の途中段階の正常応答です。
telnetを使って手動でメールを送るとき、DATAコマンドを入力した段階でこの応答(メール内容入力の開始)を見ることができます。

ではなぜfaillog(配送失敗ログ)に354が残るのか
faillogに354が残っているということは、
・相手側はDATAコマンドを受け付けて本文送信の許可(354)までは返している
・しかし、その後に本来返ってくるはずの最終応答(通常は250)がE-Post側で受信できないままセッションが終了し、最終的に配送を断念した
という状況が推測されます。

考えられるのは次のようなケースです。
・ネットワーク切断/瞬断/途中の機器による切断
・相手サーバ側が本文受信途中・受信後に切断
・タイムアウト(相手が最終応答を返さないまま時間切れ)
このような状況が当てはまる場合、「相手は受信を許可した途中で止まっている」という読みになります。

本当の理由を確認するにはsenderlogを見る
先述までの説明はあくまで“faillog上の最後の応答から推測できる範囲”です。
実際にどこで止まったかは、senderlog(配送詳細ログ)を確認する必要があります。
・senderlogを取得している場合は、メッセージID(“B”で始まる10桁の連番数字)をキーに該当時刻帯を検索してください。
・仕組み上、faillogの「最終的な失敗理由」と、senderlogに記録される「処理途中の状況」が一致しない・見え方が異なるケースがあります。

まとめ
・354は失敗理由ではなく、DATA送信許可の途中応答
・faillogに354が残るのは、DATA許可後に最終応答(250等)を受信できないまま切断し、E-Postが最終的に送信を断念した可能性が高い
・断定と切り分けにはsenderlogで該当メッセージIDの前後を確認する

(関連FAQ)
senderlog と faillog に記載された配送失敗の理由が異なる
送信できなかったエラーメールの内容とfaillogの内容が異なる
ログに記録されるメッセージIDの後の枝番種類について