OpenPNEをヴァーチャルドメイン下で運用するとき、メールサーバをどう設定したらいいのか、ちょっと(というかかなり)困ったのでメモ。
OpenPNEのメールサーバ設定マニュアルは非常に玄人向けで、素人にはいったいどこから手を付けたらいいのか分かりません…自分でサーバー運用するような人は、それくらい基本スキルってことですかね…
とりあえず、OpenPNEの構築は完了しているということで、メールサーバの設定に進みます。OpenPNE2.14.0に同梱してある「OpenPNEセットアップガイド」には以下のメールをコマンドに転送しろ、と書いてあります。
項目 | 新形式 |
---|---|
新規登録 / ログインURL取得 | get@MAIL_SERVER_DOMAIN |
プロフィール写真変更 | pXXX-YYY@MAIL_SERVER_DOMAIN |
コミュニティ掲示板メール投稿 | tXXX-YYY@MAIL_SERVER_DOMAIN |
日記メール投稿 | bXXX-YYY@MAIL_SERVER_DOMAIN |
日記写真変更 | biXXX-YYY@MAIL_SERVER_DOMAIN |
コミュニティ写真変更 | ciXXX-YYY@MAIL_SERVER_DOMAIN |
トピック・イベント写真変更 | tiXXX-YYY@MAIL_SERVER_DOMAIN |
日記コメントメール投稿 | bcXXX-YYY@MAIL_SERVER_DOMAIN |
アルバム画像投稿 | aiXXX-YYY@MAIL_SERVER_DOMAIN |
「XXX」には数字、「YYY」には12バイトの英数字[0-9a-f]{12}が入ります。(なんか、しばらく見ないうちに設定するメールの項目が増えたなぁ。人んち子の成長は早ぇね。)
ですが、こう書いてあるだけで、これを実際、どういう風に設定すればいいのか、と言う事については言及されていません。まあ、Postfixとかsendmailとかqmailとか、いろいろあるし、サーバの環境に寄っても設定が変わったりしてくるので、あえて書いてないのかもしれませんが。
で、設定を忘れないようにメモ。環境は以下の通り。
- CentOS 5.3
- OpenPNE 2.14.0 (ヴァーチャルドメイン「example.com」下で運用)
- Postfix 2.3.3
設定手順
その1。以下の内容で「/etc/postfix/virtual.regexp」を作成します。「virtual.regexp」とファイル名は、別にvirtual.pcreでもvirtual.openpneでもなんでもいいみたいです。
/^get@example\.com$/ openpne-request
/^p\d+-[\da-f]{12}@example\.com$/ openpne-request
/^t\d+-[\da-f]{12}@example\.com$/ openpne-request
/^b\d+-[\da-f]{12}@example\.com$/ openpne-request
/^bi\d+-[\da-f]{12}@example\.com$/ openpne-request
/^ci\d+-[\da-f]{12}@example\.com$/ openpne-request
/^ti\d+-[\da-f]{12}@example\.com$/ openpne-request
/^bc\d+-[\da-f]{12}@example\.com$/ openpne-request
/^ai\d+-[\da-f]{12}@example\.com$/ openpne-request
これはつまり、get@example.comなどのメルアド宛てに来たメールを「openpne-request」というユーザに転送しろ、という意味。このユーザ名も他とかぶらなければ、「openpne-request」以外のものでもOKっぽいです。
その2。「/etc/aliases」に以下の内容を追記します。場所はどこでも大丈夫っぽいので、自分の分かりやすい場所で。「OPENPNE_DIR」はOpenPNEのディレクトリのパスです。(例えば /var/www/html/OpenPNE とか。)
openpne-request: "|/usr/bin/php OPENPNE_DIR/bin/mail.php"
これはつまり、「openpne-request」ユーザ宛てに転送されてきたメールを「|/usr/bin/php OPENPNE_DIR/bin/mail.php」というコマンドで処理(パイプ処理)しろ、と言うことです。
その3。「/etc/aliases」の修正を反映するために以下のコマンドを実行。
# newaliases
その4。「/etc/postfix/main.cf」に以下の内容を追記します。どこに追記するのがベストなのか分からないのですが、自分はファイルの一番最後に追記しました。
virtual_alias_maps = pcre:/etc/postfix/virtual.regexp
その5。修正したpostfixの設定を反映するためにpostfixを再起動。
# service postfix reload
以上でOKなハズ。
いろいろ補足説明
別に知らなくても設定するのに問題ないけれど、個人的に気になったことをいくつか。
その1。「/etc/postfix/main.cf」ですが、「virtual_alias_maps」で設定したドメインは「mydestination」で指定する必要はないようです。というか、してはいけないようです。なぜかは知らない。
その2。わざわざ「openpne-request」なんてユーザにメール転送してからパイプ処理とか、めんどくない?「/etc/postfix/virtual.regexp」の内容を次のようにした方がシンプルで分かりやすくない?(ちょっと長くなるけど。)
/^get@example\.com$/ "|/usr/bin/php OPENPNE_DIR/bin/mail.php"
と思ったら、virtual_alias_mapsで指定する場合、virtual.regexp内ではパイプ処理が出来ない事になってるようです。これは実際試してみたのですが、やっぱり出来ませんでした。
そのため、1回メールをユーザに転送し、/etc/aliesesで指定されたパイプ処理を実行、と言う方法をとっています。なにか裏技的ですが。
ちなみに、「virtual_alias_maps」ではなく、「alias_maps」で指定する場合(つまりバーチャルドメインを使用しない場合)はパイプ処理を直接記述できます。なぜかは知らない。
その3。from 内部 to 内部ではメールが受信できるのに、from 外部 to 内部ではなぜか受信できない!と言う方。あなたのサーバの25番ポート、開いていますか?(そのまま放っておくと、大変なことになりますよ…)
実際、自分はこれに気付かず、半日つぶしてしまいました。。特にメインのメルサバをgoogle appsにしている場合、自分のサーバの25番ポートを開く必要がないので、閉じた状態になっている可能性大。しかも、あーでもないこーでもないとテストメールを大量に送信しちゃってたりすると、ポートを開いたとたん、それまで行き場が無くて迷子になっていたメールたちが一気になだれ込んでくるので注意です。。。
参考
- Editorial Department Blog » Blog Archive » バーチャルドメインでのopenPNEの携帯用設定。
- 2009-01-01 – NetPenguinの日記
- SNS構築(OpenPNE) – Fedoraで自宅サーバー構築