10 qmailのログ

qmail環境への移行に際し、直面したトラブルをログファイルに記述される主なエラーメッセージをもとに、原因をつきとめ、対処法について考察する。


10.1キューの状態

メールの配送が何らかの原因でできずに延期された場合、メールは配送されるまで、あるいは設定した期限がくるまでメールキューにためられる。キューの状態を見るには

# /var/qmail/bin/qmail-qstat

で残っているメッセージ数の、

# /var/qmail/bin/qmail-qread

でキューにあるメッセージ一つ一つの詳細な情報の表示ができる。

また、キューにメールが滞在できる最大時間を設定するために、設定ファイル/var/qmail/control/queuelifetimeを作成し、滞在可能最大時間を秒単位で記述する。


10.2 メールログ

メール配送のトラブルが生じたときに、その原因究明にメールログは大きな手がかりとなる。メールの配送に関するログはsendmailの時と同じく、/var/log/maillogに記録される。

配送が正常に行われれば、一行ごとにタイムスタンプ等に続けて、

 


new msg [メッセージID]                       メッセージのログの開始

info msg [メッセージに関する情報]        メッセージの情報

starting delivery : [配送ID]                   配送開始

status : local 1/10 remote 0/20            状態表示

delivery [配送ID] : success                  状態表示

status : local 0/10 remote 0/20            状態表示

end msg : [メッセージID]                    キューからメッセージを削除し、

 メッセージのログを終了

 


といったログになる。

ところが、何らかの障害の発生、あるいは設定ミスにより、メールの配送が正常に行われない場合、ログにはsuccessに変わってfailureあるいはdeferralといった文字列、それに続いて配送不能の原因を示すエラーメッセージが表われる。以下に研究を通して私が目にしたエラーメッセージのうち、それが特にqmail独特の動作や構造に起因すると考えられる事項を記す。

 

Unable_to_chdir_to_maildir

メールボックスであるMaildirでディレクトリを変更できないという旨のメッセージ。qmail-localプログラムはユーザー権限でMaildir/newにメールを配送するため、Maildir以下のディレクトリがユーザーの所有になってないとcdしてファイルを作ることができない。また、qmail-localMaildir以下のディレクトリのパーミッションが700になっていないと、配送を中止する。このエラーによりユーザーがメールを受け取ることができない場合は、Maildirの所有者やパーミッションを確認する。


Sorry._Although_I’m_listed_as_a_best_preference_MX_or_A_for_that_host,

/_it_isn’t_in_my_control/locals_file,_so_I_don’t_treat_it_as_local.

DNSサーバのMXAレコードでは配送先ホストとして存在するが、設定ファイルlocalsに自ホストの記述がないため、そのメールをローカル配送として処理することができないというエラー。localsにローカル配送として処理するホスト名を記述するか、smtproutesに自ホスト宛のメールを受け取る設定をしてあるホストを記述してメールを転送する。


Sorry,_that_domain_isn’t_in_my_list_of_allowed_rcpthosts

メールの転送を許可していないホストが、rcpthostsに記述されていないホストにメールを送信しようとしたときに出るエラー。メールの転送を無条件で許可するなら、そのホストに対応する環境変数のRELAYCLIENTに空文字列を設定する。


Sorry,_no_mailbox_here_by_that_name.

ローカル配送されるべきメールとして処理されたが、該当するユーザーがいない場合に出されるエラー。ユーザー名の間違いや、パーセントハックが有効になっていない状態でのパーセントハックを利用したメール配送の発生が原因と考えられる。alias/.qmail-defaultがあれば全ての宛先ユーザー不明のメールを受信して、このエラーメッセージは出さない。

 

何らかのエラーによってメールの配送が延期されたメールは、その後、何度か再送が試みられる。それにもかかわらず配送が完了しないままqueuelifetimeで設定した時間が経過すると

I’m_not_going_try_again;_this_message_has_been_in_the_queue_too_long.

というメッセージを出して、差出人にメッセージを差し戻す。

 

メールサーバの管理者はこうしたログを参照しながら、セキュリティーを保ちつつ、メールの配送が正常に行われるよう、保守管理を行うことが求められる。