fml からメールで返事を送り返す
送り返すべきメールは
Mail::Delivery::Queue
を使いML固有の queue に入れます。
queue に入ったメールは、のちに
FML::Process::QueueManager
クラス経由で(配送)処理をします。
fml の中ではどう書くのか?
あるメッセージ(テキストメッセージ)を送り返したい場合は、次のように書きます。
$curproc->reply_message( "you are not a ML member." );
この場合の受信者はコマンドの結果などを受けとる人、
fml にリクエストをした人です。
ファイルを送りたい場合や画像ファイルを送りたい場合は次のようにします。
$curproc->reply_message( {
type => "text/plain; charset=iso-2022-jp",
path => "/etc/fml/main.cf",
filename => "main.cf",
disposition => "main.cf example",
});
$curproc->reply_message( {
type => "image/gif",
path => "/some/where/logo001.gif",
filename => "logo.gif",
disposition => "attachment",
});
mail queue と配送の仕組み
FML::Process::QueueManager により
特定の queue ファイルが queue ディレクトリから pickup され、
Mail::Message で parse され、
FML::Mailer 経由で
Mail::Delivery が実際にメール配送処理をします。
Mail::Delivery::Queue
↓
↓→→→ キューディレクトリ
↓
FML::Process::QueueManager
↓
↓←←← キューディレクトリ
↓
FML::Mailer
↓
Mail::Delivery
mail queue ディレクトリ
queue ディレクトリは複数のディレクトリからなります。
new/
active/
deferred/
info/sender/
info/recipients/
info/ には envelope 情報が格納されます。
queue ファイルを作る時は、一旦 new/ に作成します。
queue ファイルを作る作業が終了し、配送準備 OK となったら
new/ から active/ に移動されます。
つまり active/ にあるファイルは配送準備ができているものです。
queue ディレクトリをロックする
特定の $queue_id object ごとに lock() と unlock() メソッドを使い、
ロックをかけます。
ロックは active/$queue_id ファイルに対しての flock(2) システムコールです。