とりあえず、物覚えが悪いので、記録、記録・・・と。。。^^;
今回は postfix を使用したメールシステム上でメールのフォワードを MySQL のデータベースを使って行おうというものです。
わかりにくいかもしれませんが、結局以下の事がやりたかっただけです。
・私が管理しているサーバでメールが着信したときに携帯に転送して欲しいという要望が多かった
・.forward を使用して転送していたがユーザ数が増えてきたり度重なる携帯メアド変更への対応がすぐに出来なかったりした。
・docomoが勝手にドメインを変更して、ブチ切れた(笑)
ということで、ユーザに勝手に変更してもらえるようにしたいと思いました。

ところが、ユーザはずぶのシロートが多く、間違っても「OS は FreeBSD だから .forward を編集してね〜☆」なんて言えません。
そこで、Web から変更できるインターフェースを作ろうと思いました。が、各ユーザの .forward を Web で変更するのは大変です。

ここで登場するのが postfix+MySQL のタッグです。MySQL の特定のテーブルに「転送前」と「転送後」のアドレスを入れておけばばっちりです。これならインターフェースも簡易だし、何より MySQL は私の得意分野ですので、一粒で二度おいしいわけです。

というわけで、早速構築手順です。

ここでは既に MySQL の install は済んでおり、テーブルなんかは作れて、認証なんかも出来てる状態であるとします。
ちなみに、私の所の MySQL はバージョンが 3.23.33 です。え?古いって?まぁ、いいじゃないですか(笑)
postfix は 20010808 版です。え?これも古いって?まぁ、まぁ。^^;



ところで、ここまで読んで「前振りが長いなぁ。。。」と思ったあなた、正解です(笑)
前振りが長いのには理由があります。実は、とっても簡単なのです。^^;

内容は
・postfix の MySQL 版での再構築
・MySQL にテーブルを作成して転送前と、転送後のアドレスを入れます
・MySQL の config 情報ファイルの作成
・ main.cf の中に MySQL の config 情報のファイル指定
・postfix の再起動
これだけです。(笑)


<postfix の MySQL 版での再構築>
postfix のソースがある所で、以下のコマンドで Makefile を作成します。以前に何かのオプションを付けて make した事がある場合はそのオプションも忘れないでください。ちなみにこの MySQL 用のオプションは MYSQL_README の中にも書かれています。

# make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/include/mysql' 'AUXLIBS=-L/usr/local/l ib/mysql -lmysqlclient -lz -lm'

ここで、include パスと library パスは適宜変更してください。
次に

# make

とします。
終わったら

# make install

とします。これだけです。
簡単でしょう。。。^^;

ただ、私は make install の途中で「libmysqlclient.so.10なんてしらんでぇ」と 怒られまして。。。
これは library パスの中に libmysqlclient.so.10 が無かったか、ldconfig の中に無かったわけで、libmysqlclient.so.10 を探してそのディレクトリごと

# ldconfig -m /usr/local/lib/mysql/

な〜んてして逃げました。^^;


<MySQL にテーブルを作成して転送前と、転送後のアドレスを入れます>
ここから先はちょっと受け売りなんですが、結局
・MySQL に新しいデータベースを作成
・テーブルを作成
・アドレスを挿入
って感じです。

まず、データベースを作成します。

# mysqladmin create mailalias

データベースの権限を設定します。

# mysql mysql
MySQL> insert into db values ('%', '
mailalias', 'mailalias', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
MySQL> insert into user values ('localhost', 'mailalias', password('hogehoge'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

権限は適宜設定してください。
MySQL の設定をリロードします。

# mysqladmin reload

MySQL にテーブルを作成し、転送先を設定する。

% mysql -umailalias -phogehoge mailalias
mysql> CREATE TABLE mxaliases ( Number int(11) NOT NULL auto_increment, alias char(255) default NULL, forw_addr char(255) default NULL, PRIMARY KEY (Number));
mysql> insert into mxaliases values ('', 'endo', 'endo');
mysql> insert into mxaliases values ('', 'endo', 'hogehoge@jp-k.ne.jp');

これで endo 宛に来たメールが endo 本人と hogehoge@jp-k.ne.jp 宛に送られる。
なんか endo 宛がループしそうだけど、大丈夫。そこはそれ、賢い。


<MySQL の config 情報ファイルの作成>
MySQL へ接続するための各種情報を設定します。設定内容は
・接続ユーザ名
・接続パスワード
・データベース名
・テーブル名
・転送先アドレス
・転送条件アドレス(宛先アドレス)

作成するファイルはとりあえず、/etc/postfix/mysql-aliases.cf とします。
内容は以下のようにします。

# cat /etc/postfix/mysql-aliases.cf
user = mailalias
password = hogehoge
dbname = mailalias
table = mxaliases
select_field = forw_addr
where_field = alias


<main.cf の中に MySQL の config 情報のファイル指定>
たぶん、/etc/postfix に入っている main.cf の以下のエントリを探す。

alias_maps = hash:/etc/aliases

変更したことのある人はこの限りでは無いので、それなりに読み替えてください。
ここを以下のように変更します。

alias_maps = hash:/etc/aliases, mysql:/etc/postfix/mysql-aliases.cf

これで mysql を使って転送できるようになります。


<postfix の再起動>
これは適宜、です(笑)私は

# /usr/local/etc/rc.d/postfix.sh start

です。

もちろん、実行する前に stop か kill しておりますです。はい。