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-localはMaildir以下のディレクトリのパーミッションが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サーバのMXやAレコードでは配送先ホストとして存在するが、設定ファイル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.
というメッセージを出して、差出人にメッセージを差し戻す。
メールサーバの管理者はこうしたログを参照しながら、セキュリティーを保ちつつ、メールの配送が正常に行われるよう、保守管理を行うことが求められる。