数年(下手したら10年来)振りにfmlをインストールしたのでメモ。8.xが出ているんだけど、ネットの情報量の多さ&MySQLとの連携方法が判っているという理由で4を導入した。
前提:
- 専用ユーザ「fml」を作成する。
- メールサーバはqmailを使用。
- ML名は「testml」とする。
- 行頭が「#」の場合はユーザfmlで作業。「$」はrootで作業。
システム仕様:
- MySQLと連携させ、登録アドレスはそちらで管理したい。(makefmlは叩かない)
1. fmlをインストールする。
# su $ $ wget ftp://ftp.fml.org/pub/fml/stable/fml-4.0-stable-20040215.tar.gz $ tar zxvf fml-4.0-stable-20040215.tar.gz $ (展開ログ) $ cd fml-4.0-stable-20040215 $ perl makefml install $ (インストールログ) $ $ su - fml # /usr/local/fml/makefml newml testml # (ML作成ログ)
2. /etc/aliasに、MLで使用するエイリアス情報を追加する。
$ ln -s /var/spool/ml/etc/qmail/alias/.qmail-* /var/qmail/alias/
3. /var/spool/ml/etc/qmail/alias/qmail-testml-admin・qmail-testml-request の中にあるアカウントを、管理者のメールアドレスに変更する。
デフォルトではどちらも「fml」。変更が必要ない場合はスルーで。
4. assignの設定をqmailに追加する。
$ ln -s /var/spool/ml/etc/qmail/users/assign /var/qmail/users/assign
/var/qmail/users/assign が既に存在する場合は、/var/spool/ml/etc/qmail/users/assign の内容を末尾に追加する。
5. MySQLと連携させるので、まず接続用のモジュールをコピーする。
# cp /usr/local/fml/databases/mysql /var/spool/ml/etc/fml/mysqldriver.pl
次に、config.cf の設定を変更する。
# vi /var/spool/ml/testml/config.ph
# DBを使用する $USE_DATABASE = 1; # DBはMySQLを使用する $DATABASE_METHOD = "mysql"; # 先ほどコピーしたモジュールを指定する $DATABASE_DRIVER = "/var/spool/ml/etc/fml/mysqldriver.pl"; # MySQLのホスト $SQL_SERVER_HOST = "localhost"; # MySQLの使用しているポートを指定(デフォルト設定のままなら、MySQLは3306) $SQL_SERVER_PORT = "3306"; # DB接続ユーザ $SQL_SERVER_USER = "testuser"; # DB名 $SQL_DATABASE_NAME = "testdb"; # DB接続パスワード $SQL_SERVER_PASSWORD = "testpass123";
6. MySQLデータベースに専用テーブルを追加する
http://www.fml.org/software/fml4/Japanese/RDBMS/3.html#C3S2
をそのまま使用。
create table ml ( ml char(64), file char(64), address char(64), off int, options char(64) );
きちんと書き直してみた。
CREATE TABLE IF NOT EXISTS ml ( id int(1) NOT NULL auto_increment, ml char(64) collate utf8_unicode_ci NOT NULL default "testml", file char(64) collate utf8_unicode_ci NOT NULL default "", address char(64) collate utf8_unicode_ci NOT NULL default "", off int(11) NOT NULL default "0", options char(64) collate utf8_unicode_ci NOT NULL default "", memo varchar(128) collate utf8_unicode_ci NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT; );
今回は
- CakePHPと連携させる
- 1システムにつき1MLの使用が前提
- mlテーブルは、そのデータベースを使用している1システムでしか使用しない
以上の理由から、[ml]にはデフォルト値を設定した。複数MLを1テーブルで運用するのであれば、defaultは設定しない方がいいかな。
カラムを追加した関係で4でコピーしたmysqldriver.plがそのままで動かないので、、各所にあるINSERT文を以下のように修正する。
# $query = " insert into ml"; # 項目名をきちんと指定してやる。 $query = " insert into ml (ml, file, address, off, options) ";
7. 設定が済んだらとりあえずテスト。
# /usr/local/fml/makefml test testml
Perlモジュールが足りてなかったりMySQLと連携がうまくいってなかったりする場合はここで判るので、結果を見て調整。
8. アドレスを追加する。
# /usr/local/fml/makefml add test@testmail.ne.jp
6で作成したテーブルに、[file]が「actives」「members」となった同アドレスのデータが2行追加されていれば成功。
9. アドレスにメールを送ってみる
返信があればとりあえず設定完了。
私の場合、/var/log/maillog に
Jun 23 18:25:03 testmail qmail: 1245749103.527142 delivery 374: deferral: fastforward:_fata l:_unable_to_read_/var/spool/ml/testml/include.bin:_file_does_not_exist/
というログが出てうまくいかなかった。そもそもinclude.binなんてファイルないしどこにも書かれてなくて「?」だったので、とりあえず
ln -s /var/spool/ml/testml/include /var/spool/ml/testml/include.bin
としたら通った。ホントにいいのかしらこれで。
ちなみに以上の手順だと、fmlデフォルトの挙動である
- 登録のないアドレスからのメールは拒否
- 受信したメールは即時に配送
で稼動する。なので、
- 登録のないアドレスからメールを受けたら案内を流す
- 登録のないアドレスからメールを受けたら仮登録して案内を返す
- メールを○時にまとめて送りたい
などなど要望があるなら、設定を変更する必要がある。