senderlog と faillog に記載された配送失敗の理由が異なる

存在しないユーザーへ送信した場合は、通常、"user unknown"として扱われることになります。このとき、配送時の詳細ログ(senderlog)には、送信リトライの度に"550 user unknown"として、途中の記録がされていることが確認できます。

一方、配送失敗ログ(faillog)の記録には、送信リトライを繰り返した最終結果が記録されることになりますが、失敗理由として"550 user unknown"が記録されず、"Unable to deliver destination domain"として記録されることがあります。つまり、「ユーザーが存在しない」からではなく、「ドメインの名前が解決できなかった」という別の理由が記載される結果になるのです。

これは、送信リトライのステップが、MXレコードの参照→Aレコードの参照の順番で行われていることに起因します。faillog の記録が、送信リトライを繰り返し最終結果の記録をするときに、Aレコードの参照段階で失敗すると、こうした記録が残される結果となります。

さらにhostsファイルを記述しているものは、Aレコード参照するときに真っ先にhostsファイルを参照しに行きます。hostsファイルを記述していないときは、Windowsのネットワーク接続「DNSサーバー」設定項目に設定しているDNSに問い合わせて、名前解決を試みます。このとき次の2つを試します。
(1) ドメイン名からのMXレコード参照によるAレコード参照
(2) ドメイン名をそのままAレコードとした参照
この2つの結果による接続は、同一サーバを指す場合もありますが、異なる場合もあるので、その時の接続応答によって違ってきます。
さらに、hostsファイルだけでやりくりしていた場合とhostsファイル+【gataway.dat】に明記した場合とでは、faillogの記録内容に違いが出てきます。

このように、senderlog の送信リトライ中の途中理由と、faillog での配送失敗の最終理由が異なって記録されてしまうケースは、送信リトライの仕組みとも関係するため、避けることができない仕様です。配送失敗の理由を知るときは、配送失敗ログ(faillog)の記録のみならず、配送時の詳細ログ(senderlog)の途中の記録も参照するようにしてください。

(関連FAQ)
送信できなかったエラーメールの内容とfaillogの内容が異なる場合