Index: [Article Count Order] [Thread]

Date:  Fri, 18 Aug 2000 11:39:41 +0900
From:  Yuji Yamano <u90156@....jp>
Subject:  [XP-jp:00748] Re: VXP ストーリー1タスク案
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <20000818.113246.50052273.u90156@....jp>
In-Reply-To:  <00Aug17.190731jst.115203@....jp>
References:  <00Aug17.130418jst.115202@....jp>	<20000817.160015.98606834.u90156@....jp>	<00Aug17.190731jst.115203@....jp>
Posted:  Fri, 18 Aug 2000 11:32:46 +0900 (JST)
X-Mail-Count: 00748

おはようございます。

firo <firo@....jp> writes:

> それは、こういう意味でしょうか?
> 
> 1.Mailerが引数で受け取ったアドレス(メンバから見て送信先
>   のアドレス)を、配送先のアドレスに変換する。この配送先
>   のアドレスは/etc/aliasesに登録されていて、実際のメンバ
>   へのアドレスへの展開は、sendmailが行う。
>
> 2.1で送信先アドレスから配送先アドレスへの変換のための対応
>   表が、テキストファイル上にあるので、それを読んで、1の
>   変換処理を行う必要がある。

僕が考えていたのとは異なりますが、考え方としてはこれで正しいです。

大昔、ML 用のドライバーを自作していた時は、こんな感じにやっていました。
まず、以下のエントリーを /etc/aliases に追加します。(MTA は sendmail)

foo: "|/home/yyamano/ml/foo/driver"
foo-recipient: :include:/etc/mail-list/foo
foo-request: owner-foo
owner-foo: u90156@....jp

foo はリスト本体のアドレスで、ここあてのメールを受信すると
/home/yyamano/ml/foo/driver が起動され、メール本文(含むヘッダー)
は標準入力にながしこまれます。driver の中で、メールヘッダーの
書きかえや、アーカイブをおこない、最終的に送信する内容を sendmail
にふたたびわたします。

foo-recipient は配送のためのトリックです。/etc/mail-list/foo という
ファイルには実際に配送するアドレスが列挙されています。driver は、
最終的に配送するメール本文とこのアドレスを、sendmail にわたします。

foo-request、owner-foo は管理者のアドレスです。あまり気にせず、お約束
と考えておいてください。

最近の ML 用のツールがどのような処理をおこなっているのかよく知らない
のですが、だいたいこんな感じなのではないかと思います。

> さて、以上が正しいとして、以下のようなCRCを考えてみました、、
> 
> 1.Mailerがメール本文と送信先アドレスを取得する。
>   ##ここいらへんは、よく知らないのですが、メール本文はMailer
>     の標準入力から取得し、送信先アドレスは引数で受け取ること
>     になるのでしょうか?

ここで Mailer といっているものは、上の /home/yyamano/ml/foo/driver
と同じものでしょうか? もし、そうだとすると可能なはずです。

ただし、Mailer に直接アドレスをわたすよりは、ML 固有の情報(ML 名とか、
アドレス等)を記述したファイルを作っておき、そのファイル名をわたすよう
にしたほうが汎用性があると思います。

> 4.Mailerは、Mailインスタンスをnewし、本文および配送先アドレ
>   スをMailインスタンスにセットする。
> 
> 5.MailerはMailインスタンスに、出力を依頼する。
> 
> 6.Mailインスタンスは、自分の情報をsendmailの標準入力?に書き
>   出す。
>     #この時、sendmailを起動する必要があるのでしょうか?
> 
> 5と6は
>   ・Mailが返したテキストをMailerが出力する。
>   ・MailがMailerのポインタを受け取り整形後、Mailerへ出力を
>    依頼する。。等
>   いくつか代案がありそうです。

うーん、Mail インスタンスは、メール本文と配送先をためておくものですよね?
なんとなく、配送系の作業は別のクラスにさせたほうがよいように思います。

# これは、たぶんメールキューにたまっている配送まちのメールと Mail 
# インスタンスが似ていると感じているからだと思います。あまり深く考えて
# いません。

1. Mailerがメール本文とメール設定ファイルを取得する。

2. メール設定ファイルをパースし、配送先のアドレス等をメモリ上に保存する。
   
3. Mailerは、Mailインスタンスをnewし、本文および配送先アドレスを
   Mailインスタンスにセットする。

4. Mailer は、Mail インスタンスを配送エージェントクラスにわたし、配送を
   依頼する。

5. 配送エージェントクラスは sendmail を起動する。

こんな感じでどうでしょうか?

クラスとしては、

Mailer
ML 固有の設定
Mail
配送エージェント

ぐらいですね。

-- やまの