[PREVIOUS CHAPTER] [NEXT CHAPTER]

5 POP による FML の運用

    この章はPOPを使ったＭＬのエミュレーションについて説明します。UNIX上で
    これを使うことはまずありません。NTの上ではこれを利用しています。

    POP経由でスプールへ、POP3 を使ってＭＬを実行するlibexec/popfml.pl がそ
    れの専用プログラムとして実装されています。想定されているケースは

    	メールはPOP3で読めるだけ
    	メールを受けとめてプログラムを呼べないという
    		OS附属のメールシステム or ポリシー

    等の場合のために存在します。理屈としては

    	pop を使って取り寄せつつパイプで MH の rcvstore へ入力(inc)
    	pop を使って取り寄せつつパイプで fml へ投げる (ML)

    は同じです。実行する下請けプログラムが違うだけです。後はこれを cron で
    実行します。サイトに一台POP3を喋れるメールサーバがあれば自分のマシンが
    メールを受けられなくてもPOP3経由で自動的にメールをスプールしたりＭＬを
    作ったりできます。このやり方は汎用なのでPOP3でメールが読める場合ならど
    んなOSでも原理的にはMLが実行できるということになります。
    ＃でもまああくまで裏技というカテゴリでしょう。

    ついでにその後 cron で自動でfolderに入れるプログラムを走らせることもで
    きるでしょう。なおMHと同様パスワードは $HOME/.netrc からとられます。ど
    こかにパスワードを書いておかないといけないことがこの方法の最大の弱点で
    す。

    注意: inc_via_pop.pl は昔の名前(今はリンク)で、pop2recv.pl は backward
    compatible の目的で popfml.pl にリンクされています。

    5.1	elena ML を POP3 ＭＬエミュレーションする

    1. 仮想的に popfml ＭＬをつくる。このＭＬのHOMEに queue ディレクトリを
    つくるためです。

    % makefml newml popfml

    2. POPサーバに

    	elena
    	elena-ctl

    のアカウントとパスワードを設定して下さい。

    3. こういう呪文をためしてください。( \ は次の行につづきます。)

    % /usr/local/fml/libexec/popfml.pl /var/spool/ml/popfml /usr/local/fml \
    	-host POPサーバ名 \
    	-user elena -pwfile /var/spool/ml/etc/netrc \
    	-include_file /var/spool/ml/elena/include

    % /usr/local/fml/libexec/popfml.pl /var/spool/ml/popfml /usr/local/fml \
    	-host POPサーバ名 \
    	-user elena-ctl -pwfile /var/spool/ml/etc/netrc \
    	-include_file /var/spool/ml/elena/include-ctl

    なお、/var/spool/ml/etc/netrc の中は
    machine POPサーバ名
    login    elena
    password パスワード

    machine POPサーバ名
    login    elena-ctl
    password パスワード

    という感じのファイルです。~/.netrc 形式です。意味は ftp のマニュアルな
    どをみて(.netrcという項目をサーチして)ください。

    5.2	Q: ~/.popfmlrc ってなんですか？

    今ではもぉ気にしないで下さい:) それがなくても動きます

    確かに最初ある目的があって作った覚えがあるけど、NT version になるとき
    に -include で実行する内容を指定するようになったので使っても使わなくて
    もよいはずです

    5.3	Q: crontab にかくんですか?
    ../digest 2.17

    そうです。そういう呪文をずらずら書くことになります。

      */5 * * * * 呪文(popfml.pl ...ずらずら...)

    みたいなのを書きます。

    でもきっと crontab をずらずらかくうっとおしいので、適当なファイルをつ
    くって(例: /var/spool/ml/etc/popfml/master.sh (適当))、その中に例の呪
    文を書いておく方が見やすくていいとおもいます。

      */5 * * * * 	/var/spool/ml/etc/popfml/master.sh

    5.4	Popfml.pl Reference

    SYNOPSIS:

        popfml.pl [-hd] [-user username] [-host host] [-f config-file]

        -user username
        -host host(pop server running)
        -f    config-file
        -h    this message
        -d    debug mode

    例: ユーザ fukachan が POP Server hikari にアクセスする

    	popfml.pl -user fukachan -host hikari

    popfml で実行するコマンドを定義する設定ファイルは

    	~/.popexecrc
    	~/.popfmlrc

    のいづれかです。互換性のため、設定ファイルはどちらも使えます。
    もし .popexecrc と .  popfmlrc 両方あると .popexecrc が優先されます。
    $POP_EXEC という変数がフィルタのプログラムになります。 "|" はあっても
    なくても構いません。

    設定例: 全部のメールを fml.pl へ突っ込む。~/.popexecrc の中は

    	$POP_EXEC = "/usr/local/fml/fml.pl /var/spool/ml/Elena";
    	1;

    でいいわけですが、普通はＭＬと自分宛をわけたりするためにフィルタ
    (e.g. fml_local)が必要な場合もあるでしょうが、基本的には同じです。
    filter

    crontab の書き方はOSによって異なります。4.4BSD では次のような内容の
    crontab を書いて、crontab crontab などとします。

    * * * * * popfml.pl -user fukachan -host hikari

    ../digest 2.17

    Example 2:

       ~/.popexecrc という設定ファイルを使って、POP経由でfml_localへ渡す。
       またcronで popfml.pl を動かし、ＭＬと同様のことをすることにする。

       ~/.popexecrc の中は

       $POP_EXEC = "/usr/libexec/fml/fml_local -user fukachan || exit 75";
       1;

    と書いておく。cron で

    	popfml.pl -user fukachan -host hikari

    を一分おきに起こす。
    ＃NetBSD の cron だと
    ＃	* * * * * popfml.pl -user fukachan -host hikari
    ＃です。

    これで
    	一分に一回 POPサーバへメールが来ているかどうかを見にいって
    	もしメールがあればそれを取り込んで一通ずつfml_local へ渡す
    	fml_local が条件(~/.fmllocalrc)に従いrefile等を行なう

    もし、このメールが来ている先が uja-ml で

       $POP_EXEC = "/usr/libexec/fml/fml.pl /var/spool/ml/uja-ml";

    になっていれば

    	”POP経由でＭＬ（uja-ml）を運用している”

    ことと同じです。

    このやりかたを使うことで自分のマシンで sendmail を起こしていてメールを
    受け止められなくてはいけないという制約はなくなります。これで理論上は
    perl がちゃんと(?)動くOSなら WINDOWS だろうが Macintosh だろうが動くは
    ずですが…?(未確認)。NT version の FML は(Metainfo sendmail を使う場合
    を除いて)この technique を利用しています。

    ◯	変数

    	$POPFML_PROG
    	$POP_EXEC

    POP3 で読んできたメールをどの program へ渡せばいいのか？
    例:

       $POP_EXEC = "/usr/local/fml/fml.pl /var/spool/ml/Elena";

    	$POP_SERVER

    POP Server

    	$POP_USER

    ユーザ名(アカウント)はＭＬのアドレスに相当します。

    	$POP_PASSWORD

    通常 ~/.netrc からとられる。当然 $POP_USER と一組みです。

    	$POP_TIMEOUT

    POP Server がずっこけた場合等に切断する秒数。デフォールトは45秒

    	$POP_QUEUE_DIR

    POP で読んできたメールを一回保存する場所。デフォールトは

    	$DIR/var/pop.queue

    	$POP_LOGFILE

    POP のサーバとの通信のログ。デフォールトは

    	$DIR/var/log/_poplog

    	$POPFML_MAX_CHILDREN

    一回(通常1分)にする処理数。あんまりやると OS がひさん

    	$POP_PORT

    110/tcp と違う場合に設定する(普通は設定しなくても大丈夫)。

    	$POPFML_QUEUE_EXPIRE_LIMIT

    expire limit of queue spool.

[PREVIOUS CHAPTER] [NEXT CHAPTER]