<!--
    $FML: reply.sgml,v 1.4 2001/10/13 08:47:55 fukachan Exp $
-->

<chapter id="message.reply">
	<TITLE>
	fml からメールで返事を送り返す
	</TITLE>

<sect1>
   <title> 概要  </title>

<para>
送り返すべきメールは
Mail::Delivery::Queue
を使い queue に入れます。
queue に入ったメールは、のちに
FML::Process::QueueManager
クラスが(配送)処理をします。
FML::Process::QueueManager により
queue ファイルが queue ディレクトリから pickup され、
Mail::Message で parse され、
FML::Mailer 経由で
Mail::Delivery が実際にメール配送処理をします。
<screen>
Mail::Delivery::Queue
   ↓
   ↓→→→ キューディレクトリ
   ↓
FML::Process::QueueManager
   ↓
   ↓←←← キューディレクトリ
   ↓
FML::Mailer
   ↓
Mail::Delivery
</screen>
</para>
</sect1>


<sect1>
   <title> queue ディレクトリ  </title>

<para>
queue ディレクトリは複数のディレクトリからなります。 
<screen>
new/
active/
deferred/
info/sender/
info/recipients/
</screen>
info/ には envelope 情報が格納されます。
</para>

<para>
queue ファイルを作る時は、一旦 new/ に作成されます。
queue ファイルを作る作業が終了し、配送準備 OK となったら
new/ から active/ に移動されます。
つまり active/ にあるファイルは配送準備ができているものです。
</para>

<sect2>
   <title> queue ディレクトリをロックする </title>
<para>
特定の $queue_id object ごとに lock() と unlock() メソッドを使い、
ロックをかけます。
ロックは active/$queue_id ファイルに対しての flock(2) システムコールです。
</para>
</sect2>

</sect1>


<sect1>
	<title>
	fml の中でどうするか？
	</title>

<para>
あるメッセージを送り返したい場合は、次のようにします。
<screen>
$curproc->reply_message( "you are not a ML member." );
</screen>
この場合の受信者はコマンドの結果などを受けとる人、
fml にリクエストをした人です。
</para>


<para>
ファイルを送りたい場合や画像を送りたい場合は次のようにします。
<screen>
$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",
    });
</screen>
</para>

</sect1>


</chapter>
