qmailのログからメール配信されたかを簡単に確認する方法
ユーザーが沢山登録されているサイトを運営していると、ユーザーから「メールが届かなくなった!なんとかしてくれ!」といった質問、クレームを受けることがあります。
その場合にまずやることが、それがサーバー側のトラブルによるものか、ユーザーの不手際によるものかを切り分ける事です。 大抵はユーザーがメールアドレスを勝手に変更している場合が多いのですが…。 今回はqmailサーバーを運営している場合の簡単な確認方法です。
メール配信開始位置を特定
今回はメールのログが以下のパスにあるものとして書いていきます。
/usr/local/psa/var/log/maillog
「starting delivery … メールアドレス」の箇所を探す
今回探したいメールアドレスを「testmail@colo-ri.jp」としますと、ログを以下のように検索出力すると…
# cat /usr/local/psa/var/log/maillog | grep testmail
次のようになっている箇所が見つかります。
Feb 21 10:05:02 www qmail: 1266714302.115803 starting delivery 50061: msg 105644061 to remote testmail@colo-ri.jp
配信番号を控えよう
ここで、赤い文字にしている部分が配送番号です。
メールの配信は非同期で行われているため、ログにも異なったメール配信のログがどんどん割り込んで記録されていきます。
そのため、記録されている順序でログを読んでしまうと、とんでもない間違いをしてしまうことになります。
それを防ぐためには、配送番号を追跡するのが簡単です。 今回の場合は「50061」というのが配送番号になります。
配送番号を含む行で「success」「failure」を探す
配送番号が分かったら、あとはその番号を含むログで検索。
# cat /usr/local/psa/var/log/maillog | 50061
以下のような記録がある所を探します。
配信成功のログ
無事に成功し、配送先からOKが記録されています。
Feb 21 10:05:02 www qmail: 1266714302.424770 delivery 50061: success: XXX.XXX.XXX.XXX_accepted_message./Remote_host_said:_250_ok_1266714302_qp_33572/
配信失敗のログ
testmailというユーザーが登録されていないので配信エラーが記録されています。
Feb 21 10:05:02 www qmail: 1266714302.424770 delivery 50061: failure: XXX.XXX.XXX.XXX_does_not_like_recipient./Remote_host_said:_550_<testmail@colo-ri.jp>:_User_unknown/Giving_up_on_XXX.XXX.XXX.XXX./
配信延期のログ
配信延期のログは、ホスト名が見当たらなかった場合などに記録され、しばらくたって再送信するためにメールキューに入れられます。
Feb 21 10:05:02 www qmail: 1266714302.424770 delivery 50061: diferral: Sorry,_I_couldn't_find_any_host_by_that_name._(#4.1.2)/
ちなみに、これらの配送先からのレスポンスについては全て上記のようなメッセージではない場合もあります。 配送先メールサーバーによっては異なるメッセージがでます。
こういったログ解析を自動で行ってくれるqmailanalogというツールもあります。 解析レポートを毎日送ってくれるスクリプトを作ることもできるみたいですね。
参考書籍
さらに詳しく知りたい方は以下の書籍などで学習されてはいかがでしょうか。
2010-02-23