[PREVIOUS CHAPTER] [______TOC_______]

6 Q&A

    6.1	root 権限なしに MTA を交換は？

    一般にはできません。

    理論的には配送くらいはあちこちいじり回せばできるようにおもいますが、
    内部構造を非常に良く知らないとできないでしょう。

    smtpfeed をよべばいいんじゃん？という発想はあり得ますが、
    fml は queue 管理はしていないので
    一回失敗したらそのままになります。

    この理由により fml は昔(1997/10/30 くらい)から LMTP を喋れますが、
    smtpfeed を直接実行するという仕組みは実装されていません。

    6.2	smtpfeed を直接呼べませんか？

       smtpfeed は配送部分"だけ"のエージェントです。

       fork() の数が減って嬉しい:) 再送がないなら嬉しい(というのはちょっとま
       ずいだろう)けどqueue管理はしたくない(実装する側の意見)
       という感じす

       queue管理はしたくない、ってのは、仮に fml が smtpfeed と直接にや
       り取りするように実装する場合は、送信先からお断りされたときにその
       メールを手元の queue に保存したりしないといけなくなって、そうな
       るとその queue が時々刻々どうなってるか把握したりする仕事も fml
       にお鉢が回ってくるということでしょうか？

    6.3	MTA みくじ

       	1	@HOSTS で複数のほすとのMTAが使えます
       		@HOSTS = (hostA, hostB, hostC, ...)
       	2	document に書いてないけど hostA のところは
       		hostA:portA なんて書き方もできたりします:)

    6.4	受信者リストを分割する

    fml 4.0 で自動でやるのはちょっとひと工夫必要です。

    MTA の設定と追従していくことも必要です。
    postfix  を例にとります。

    4.0 は $MCI_SMTP_HOSTS の値で配送リストを分割しています。
    受信者数が 4500 で、$MCI_SMTP_HOSTS が 3 なら、

    	1500
    	1500
    	1500

    に分割します(MCI window と呼ばれています)。@HOSTS がないなら $HOSTS
    (== "localhost" by default) に対して3回コネクションを張ります。だから

    	$MCI_SMTP_HOSTS = 受信者数 / 1000 + 1;

    を毎回計算すれば OK です。もっとただしいのは (ざっくりかくと)

     $START_HOOK = q#

    	$limit = `postconf smtpd_recipient_limit` して数をもらう;
    	$n     = `wc $ACTIVE_LIST` して受信者数;
    	$MCI_SMTP_HOSTS = $n / $limit + 1;

     #;

    みたいにしておけば postfix の設定と自動追従していくはずです。