メールアカウントの管理はかなり大変です。これを動的に管理するようにするには、やはりデータベースを使う必要があると思っていろいろ調べたところ、Postfix + Postfix Admin + MySQLと言う解決策があるようです。
メールアカウントをMySQLで管理し、それをGUIで操作するのがPostfix Adminとなります。SMTPはPostfix(参考:SendmailからPostfixへの変更、Postfixでメール受信時にプログラム起動)。Webメールなどをユーザに提供するには、この組み合わせはおすすめです。
参考にしたのは「Postfix+MySQL+Postfix AdminによるバーチャルSMTPサーバの構築(CentOS4.x編)」で、ほぼここに書かれているとおりで導入できました。
何点か変更した方がいい点や、バージョンによる違いがありましたので、差分を書いていこうと思います。
先ほどのページでは下記のように書かれています。
◆Postfix Adminの設定
3.次にデータベースのテーブルを作成しておく。MySQLでパスワードを設定している場合
[パスワード未設定時]
# cd /var/www/html/postfixadmin # mysql -u root < DATABASE_MYSQL.TXT
[パスワード設定時]
# cd /var/www/html/postfixadmin # mysql -u root -p < DATABASE_MYSQL.TXT Enter password:xxxxx[Enter]
このDATABASE_MYSQL.TXTが無いのですが、Postfix Adminの2.3と2.1の違いだと思います。上記ページは2.1、今回導入したのは2.3です。では、MySQLのテーブル作成をどうすればいいのかというのは、setup.phpにアクセスすることで作成されます。先ほどのページの2を実行した後に、3は不要と言うことになります。
また、その他注意点としては、バーチャルドメイン関連のファイルに関してです。
◆バーチャルドメイン関係の設定ファイルの作成
mysql_virtual_domains_maps.cf
user = postfix password = new_password1 hosts = localhost dbname = postfix table = domain select_field = description where_field = domain
このselect_fieldはdomainに変更した方がいいです。ドメインを追加する場合、説明を入力しなくても追加可能です。そのため、SQLでdescriptionがNULLとなり、メール受信できません。ドメインを追加するときに必ず説明を入れると言う運用方法でカバーするか、select_fieldをdomainにするかの2パターンですが、domainにした方が運用が楽になります。
mysql_virtual_domains_maps.cf
user = postfix password = new_password1 hosts = localhost dbname = postfix table = domain select_field = domain where_field = domain
他の点はほとんど変更も何も必要ありませんでした。
素晴らしいWebサイトを用意してもらって助かりました。