※弊社記事はたぶんにPRが含まれますので
話半分で受け取ってください。

ヴァーチャルドメインでOpenPNEの携帯メール投稿を有効にしてみるメモ

 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番ポートを開く必要がないので、閉じた状態になっている可能性大。しかも、あーでもないこーでもないとテストメールを大量に送信しちゃってたりすると、ポートを開いたとたん、それまで行き場が無くて迷子になっていたメールたちが一気になだれ込んでくるので注意です。。。

参考

OpenPNEオフィシャルガイドブック

  • メーカー:毎日コミュニケーションズ
  • カテゴリ:単行本(ソフトカバー)

関連する記事