qmailの動作確認も終了したので、自宅サーバーのサービスの一つであるメーリング・リストを設定することにした。現用Linuxサーバーではsendmail+fmlで3つのメーリング・リストを運用しているのでその環境を引き継ぐ必要がある。そんなわけで、FreeBSDサーバーでもfmlを使うこととした。あらかじめweb検索で予備知識を仕入れた。先ずは、www.fml.org
から最新のfml-4.0.3.tar.gzをダウンロードした。
1 ユーザーとディレクトリーの作成
fmlでは管理者用にユーザー「fml」の作成を薦めているのでそれに従う。
/stand/sysinstallでユーザー「fml」を登録する。その後、ディレクトリーを作成する。
#mkdir /usr/local/fml
#mkdir /var/spool/ml
#chown fml:fml /usr/local/fml
#chown fml:fml /var/spool/ml
2 インストール
インストールはユーザーfmlで実行する。
#su fml
$tar zxvf fml-4.0.3.tar.gz
$cd fml-4.0.3
推奨設定RECOMMEND=yesでインストールする。途中設定に関する項目いくつかに入力する。
$make install RECOMMEND=yes
fml自体のインストールはトラブルなく終了したので、設定に移る。qmail上でのfml設定は2つの方法があるが、今回は標準的な方法により設定した。
1 ML「test」の作成
testという名前のMLを作成する。ユーザーfmlでログインし
$ /usr/local/fml/makefml newml test
で作成できる。aliasを登録するためsu -でrootになり
# ln -s /var/spool/ml/etc/qmail/alias/.qmail* /var/qmail/alias/
このままだと、ML名はfml-test@hogehoge.netになってしまうため、/var/qmail/users/assignを設定する。必要なテンプレートは/var/spool/ml/etc/qmail/users/assignにあるので該当するものを/var/qmail/users/assignに記述する。その際、空白行を作るとうまく動作しないようであるので注意する。また、最後の行のドット(.)を忘れないようにする。
#vi /var/qmail/users/assign
+test:fml:fmlのUID:fmlのGID:/var/spool/ml/etc/qmail/:-:test:
.
# /var/qmail/bin/qmail-newu
assignファイルを変更した場合は必ず上記コマンドを実施する。
2 メンバー登録
fmlは全ての管理をユーザー「fml」で行うので
#su - fml
$/usr/local/fml/makefml add test foo@hogehpge.net
でユーザーfooを登録する。
これでとりあえずの環境が整ったのでtest@hogehoge.netあてへメールを出すが音沙汰なしである。less
/var/log/maillogで調べると確かにqmailは外部からメールを受信しているが、そのメールをどういうわけかfml@hogehoge.netへ送っただけで止まってしまい、肝心のfml配送プログラムへ渡していない。これが泥沼の始まりだったとは・・・・
試しにtest-ctl@hogehoge.netあてに本文にhelpと書いたメールを出すと無事戻ってきた。ということはfml全部が動作していないわけでなく、登録されたメンバーへ配送するところに不具合があるようである。
fml@hogehoge.netへは配送されているようなので、LAN内にあるWinPCのメーラーにfml@hogehoge.netを設定してサーバーからメールをpopしてみた。qmailはMaildir方式で使用しているので
% cd /home/fml
%/var/qmail/bin/maildirmake Maildir
としておく。
fmlあてのメールは以下のようなものだった。
「以下の foo@hogehoge.net からのメールは
one line mail body
という理由のため拒否されました。」
fmlはデフォルトでcommandメールを拒否するように設定されており、それに引っかかっていたわけである。確かにテストメールは本文に「hello」としか書いてなかったのでこれでは配送されないことになる。
実はこれがわかるまでかなりの時間がかかっている。というのはサーバーでは日本語の設定をしていないので、fmlのMaildir/newを確認したが以下のようなメールなので見逃してしまった。WinPCからpopして初めて認識したわけである。
「ESC$B0J2<$NESC(B foo@hogehpge.net ESC$B$+$i$N%a!<%k$OESC(B
one line mail body
ESC$B$H$$$&M}M3$N$?$a5qH]$5$l$^$7$?!#ESC(B」
テストメールの本分に1行だけではなく数行のまとまった文章を書いてtest@hogehoge.net
あてに出すと無事、配送された。
今回は、fmlあてのメールを日本語で読めなかったのが原因の一つであるが、これをfooあてに転送しておけば日本語環境のあるWinPCで簡単にpopできたことになる。
qmailでメールを転送する方法はたとえば、fml@hogehoge.netあてのメールをfoo@hogehoge.netへ転送する場合は
su fml
cd /home/fml
vi .qmail
foo@hogehoge.net
としてhomeディレクトリーの.qmailファイルに転送先のアドレスを記入しておく。自分のメールボックスに残しておきたい場合は
foo@hogehoge.net
./mbox
とすればOKである。
fmlの動作を設定するのは
/usr/local/fml/makefml config test
とする。今回のトラブルの元になったone line mail bodyのメール拒否はメニューの
7 SECURITY & FILTERINGにある
* Filter
2 USE_DISTRIBUTE_FILTER YES
で設定できる。デフォルトは
Filtering for distribute mails.
For example, rejects the following mails
no content body
only 'unsubscribe' word
invalid Message-Id
となっている。もちろん、これは不正なコマンドメールを拒否するためのセキュリティー措置である。