おはようございます。
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
配送エージェント
ぐらいですね。
-- やまの