qmailはモジュール構成になっていて、各モジュール単位に役割分担しています。qmailのコマンドとそのコマンドによって実行されるプロセスについて整理しました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
qmail-start
○構文
qmail-start [デフォルト配送方式 [ロガー 引数]]
・qmail-startは、下記デーモンを開始させる。
qmail-send,qmail-lspawn,qmail-rspawn,qmail-clean
・それぞれのデーモンを適切なユーザーID、グループIDで開始させる。
・ロガーが指定された場合は、qmail-sendの出力を受け取り、ロガーに引き渡す。
・配送方式が指定された場合は、それをqmail-lspawnに引き渡す。
○実行例
私の環境では、qmailの起動スクリプトが下記のようになっています。
qmail-start ./Maildir/
qmai-startによって起動されたデーモンは下記のようになっています。
qmail-start [デフォルト配送方式 [ロガー 引数]]
・qmail-startは、下記デーモンを開始させる。
qmail-send,qmail-lspawn,qmail-rspawn,qmail-clean
・それぞれのデーモンを適切なユーザーID、グループIDで開始させる。
・ロガーが指定された場合は、qmail-sendの出力を受け取り、ロガーに引き渡す。
・配送方式が指定された場合は、それをqmail-lspawnに引き渡す。
○実行例
私の環境では、qmailの起動スクリプトが下記のようになっています。
qmail-start ./Maildir/
qmai-startによって起動されたデーモンは下記のようになっています。
qmails 19228 6288 0 Mar20 ? 00:00:00 qmail-send root 19232 19228 0 Mar20 ? 00:00:00 qmail-lspawn ./Maildir/ qmailr 19233 19228 0 Mar20 ? 00:00:00 qmail-rspawn qmailq 19234 19228 0 Mar20 ? 00:00:00 qmail-clean
qmail-lspawnに./Maildir/が渡されています。
qmail-clean
・qmail-cleanは、キューディレクトリーをクリーンアップする。
・手動でqmail-cleanは実行しない。
・手動でqmail-cleanは実行しない。
qmail-send
・qmail-sendは、qmail-queueによってキューに保持されたメールを受け取り、ローカル宛てのメールはqmail-lspawn、リモート宛てのメールはqmail-rspawnに引き渡す。
・qmail-sendは、下記設定ファイルを読み込み、設定内容に応じた動作をする。
/var/qmail/control/配下の下記設定ファイル
bauncefrom,bauncehost,concurrencylocal,concurrencyromote,
doublebouncehost,doublebounceto,envnoathost,locals,
percenthack,queuelifetime,virtualdomains
・qmail-sendは、qmail-startによって自動で起動されるので手動で起動させない。
・qmail-sendは、下記設定ファイルを読み込み、設定内容に応じた動作をする。
/var/qmail/control/配下の下記設定ファイル
bauncefrom,bauncehost,concurrencylocal,concurrencyromote,
doublebouncehost,doublebounceto,envnoathost,locals,
percenthack,queuelifetime,virtualdomains
・qmail-sendは、qmail-startによって自動で起動されるので手動で起動させない。
qmail-lspawn
・qmail-lspawnは、qmail-sendからコマンドを受け取る。
・/var/qmail/users/cdbを参照し、送信先のメールアドレスのユーザが含まれているか確認する。
・上記で含まれていなければ、qmail-getpwでサーバー内のローカルユーザーを確認する。
・qmail-lspawnは、qmail-startによって自動で起動されるので手動で起動させない。
※1 /var/qmail/users/cdb
・/var/qmail/users/cdbは、qmail-newuによって作成される。
・qmail-newuは、/var/qmail/users/assignファイルを読み込んで/var/qmail/users/cdbを作成する。
●使用例
・/var/qmail/users/cdbを参照し、送信先のメールアドレスのユーザが含まれているか確認する。
・上記で含まれていなければ、qmail-getpwでサーバー内のローカルユーザーを確認する。
・qmail-lspawnは、qmail-startによって自動で起動されるので手動で起動させない。
※1 /var/qmail/users/cdb
・/var/qmail/users/cdbは、qmail-newuによって作成される。
・qmail-newuは、/var/qmail/users/assignファイルを読み込んで/var/qmail/users/cdbを作成する。
●使用例
# cd /var/qmail/users # vi assign =test-wp.home:test-wp:502:502:/home/test-wp:-:home: +test-wp.work:test-wp:502:502:/home/test-wp:-:work: . # cd /var/qmail/bin # ./qmail-newu # ls /var/qmail/users/ assign cdb
※2 qmail-getpw
○構文
qmail-getpw ‘local’
○リターン値
‘local’を管理するユーザー名
上記ユーザーのユーザーID
上記ユーザーのグループID
上記ユーザーのホームディレクトリ
‘local’が拡張アドレスの場合は、ダッシュ
‘local’が拡張アドレスの場合は、拡張名
●実行例
# /var/qmail/bin/qmail-getpw test-wp | od -c 0000000 t e s t - w p \0 5 0 2 \0 5 0 2 \0 0000020 / h o m e / t e s t - w p \0 \0 \0
qmail-local
○構文
qmail-local [-nN] user hmdir local dash ext domain sender defaultdelivery
-n:メールを配信せずに確認する。
-N:デフォルト。メールを配信する。
user:配信先のユーザー名
hmdir:ホームディレクトリ
local:受信メールアドレスの@より左部
dash:拡張アドレスの場合は、”-“を指定
ext:拡張アドレスの拡張名
domain:受信アドレスのドメイン部
sender:送信メールアドレス
defaultdelivery:デフォルトの配送方式
・qmail-localは、メールメッセージを標準入力から読み、ローカルのユーザーに配送。
・qmail-localは、qmail-lspawnによって実行される。
●実行例
qmail-local [-nN] user hmdir local dash ext domain sender defaultdelivery
-n:メールを配信せずに確認する。
-N:デフォルト。メールを配信する。
user:配信先のユーザー名
hmdir:ホームディレクトリ
local:受信メールアドレスの@より左部
dash:拡張アドレスの場合は、”-“を指定
ext:拡張アドレスの拡張名
domain:受信アドレスのドメイン部
sender:送信メールアドレス
defaultdelivery:デフォルトの配送方式
・qmail-localは、メールメッセージを標準入力から読み、ローカルのユーザーに配送。
・qmail-localは、qmail-lspawnによって実行される。
●実行例
# ./qmail-local -n test-wp /home/test-wp test-wp-home - home example.com admin@example.com ./Maildir/ forward test-wp did 0+1+0
did 0+1+0 の意味はよく分かりませんが、エラーが表示されず、
forward test-wp
と表示されているので問題ないようです。
qmail-rspawn
・qmail-rspawnは、qmail-startによって開始される。
・qmail-rspawnは、qmail-sendからコマンドを受け取る。
・qmail-rspawnは、標準入力からリモート配送コマンドを読み込み、qmail-remoteに配送を依頼し、配送結果を標準出力にレポートする。
・qmail-rspawnは、qmail-startによって自動で起動されるので手動で起動させない。
・qmail-rspawnは、qmail-sendからコマンドを受け取る。
・qmail-rspawnは、標準入力からリモート配送コマンドを読み込み、qmail-remoteに配送を依頼し、配送結果を標準出力にレポートする。
・qmail-rspawnは、qmail-startによって自動で起動されるので手動で起動させない。
qmail-remote
○構文
qmail-remote host sender recip
○引数
host:配送先のホスト名
sender:エンベロープ送信者アドレス
recip:エンベロープ受信者アドレス
○レポートコード
r:ホストが受信を許可
h:ホストが受信を永久に拒否
s:ホストが一時的に受信を拒否
K:ホストが受信者へのメッセージ配送を許可
Z:一時的な失敗
D:パーマネントエラー
・qmail-remoteは、メールメッセージを標準入力から読み、SMTPで引数の”host”、”recip”宛てに配送する。
・qmail-remoteは、qmail-rspawnによって実行される。
●実行例
qmail-remote host sender recip
○引数
host:配送先のホスト名
sender:エンベロープ送信者アドレス
recip:エンベロープ受信者アドレス
○レポートコード
r:ホストが受信を許可
h:ホストが受信を永久に拒否
s:ホストが一時的に受信を拒否
K:ホストが受信者へのメッセージ配送を許可
Z:一時的な失敗
D:パーマネントエラー
・qmail-remoteは、メールメッセージを標準入力から読み、SMTPで引数の”host”、”recip”宛てに配送する。
・qmail-remoteは、qmail-rspawnによって実行される。
●実行例
# vi msg From: from@from-example.com To: to@to-example.com Subject: testmail This is Test. # ./qmail-remote ipone.ne.jp from@from-example.com to@to-example.comレポートコードが"rk"となっていますので、問題なく配送できています。