[PREVIOUS CHAPTER] [NEXT CHAPTER]
5 POP による FML の運用


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


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

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

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

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

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

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

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


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

1. 仮想的に popfml MLをつくる。このMLの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;

でいいわけですが、普通はMLと自分宛をわけたりするためにフィルタ
(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 を動かし、MLと同様のことをすることにする。

   ~/.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経由でML(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

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

	$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]