qmailの各コマンド、プロセスについてまとめました

qmailはモジュール構成になっていて、各モジュール単位に役割分担しています。qmailのコマンドとそのコマンドによって実行されるプロセスについて整理しました。

(1)qmail-start
  qmail-send,qmail-lspawn,qmail-rspawn,qmail-cleanを開始
(2)qmail-clean
  キューを掃除
(3)qmail-send
  キューからメッセージを取り、lspawn、rspawnに渡す
(4)qmail-lspawn
  ローカル配送
(5)qmail-local
  ローカル配送
(6)qmail-rspawn
  リモート配送
(7)qmail-remote
  リモート配送
 
以下、各qmailコマンドについてついてまとめました。
 

(1)qmail-start


 
・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によって起動されたデーモンは下記のようになっています。
 
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/が渡されています。
 

(2) qmail-clean


 
・qmail-cleanは、キューディレクトリーをクリーンアップする。
 
・手動でqmail-cleanは実行してはいけないようです。
 

(3)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によって自動で起動されるので手動で起動させてはいけないようです。
 

(4)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を作成する。
 
使用例)
# 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
 

 

(5)qmail-local


 
・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 -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
と表示されているので問題ないようです。
 

(6)qmail-rspawn


 
・qmail-rspawnは、qmail-startによって開始される。
 
・qmail-rspawnは、qmail-sendからコマンドを受け取る。
 
・qmail-rspawnは、標準入力からリモート配送コマンドを読み込み、qmail-remoteに配送を依頼し、配送結果を標準出力にレポートする。
 
・qmail-rspawnは、qmail-startによって自動で起動されるので手動で起動させてはいけないようです。
 

(7)qmail-remote


 
・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によって実行される。
 
実行例)
# 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 < msg   rK192.168.0.1 accepted message. Remote host said: 250 2.0.0 xxxxxxx-1 Message accepted for delivery
 
レポートコードが”rk”となっていますので、問題なく配送できています。

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です