この前、地域SNS全国フォーラムでお話しさせて頂いた某地域SNSを運営されている方が、OpenPNEで携帯からのメール投稿が出来ないと言っていたので、これも何かの縁と思い設定を手伝いました。これまでレンタルサーバへの設定を行ったことがなかったのですが、まぁ、何とかなるんじゃないかと勝手に思っていたのですが、大変でした、、、。
色々と確認したところ、「OpenPNE セットアップガイド:4-2. メールサーバの設定」以外は問題なくできている模様。そう、まさに携帯メールで日記などを投稿する部分が設定できていなかったようです。で、使ってるレンタルサーバはcPanelをコントロールパネルで使っていて、メール投稿から処理するコマンドに流す部分の設定方法が分からなかったのですね。
4-2. メールサーバの設定
携帯版を使用しない場合は以下の設定は不要です。
MAIL_SERVER_DOMAIN に届くメールで、以下のメールアドレスはシステムで利用されます。
項目 新形式 旧形式
新規登録 / ログインURL取得 get@MAIL_SERVER_DOMAIN get@MAIL_SERVER_DOMAIN
プロフィール写真変更 pXXX-YYY@MAIL_SERVER_DOMAIN pXXX@MAIL_SERVER_DOMAIN
コミュニティ掲示板メール投稿 tXXX-YYY@MAIL_SERVER_DOMAIN tXXX@MAIL_SERVER_DOMAIN
日記メール投稿 bXXX-YYY@MAIL_SERVER_DOMAIN blog@MAIL_SERVER_DOMAIN
日記写真変更 biXXX-YYY@MAIL_SERVER_DOMAIN biXXX@MAIL_SERVER_DOMAIN
コミュニティ写真変更 ciXXX-YYY@MAIL_SERVER_DOMAIN ciXXX@MAIL_SERVER_DOMAIN
トピック・イベント写真変更 tiXXX-YYY@MAIL_SERVER_DOMAIN tiXXX@MAIL_SERVER_DOMAIN
日記コメントメール投稿 bcXXX-YYY@MAIL_SERVER_DOMAIN bcXXX@MAIL_SERVER_DOMAIN* XXX には数字。
* YYY には12バイトの英数字([0-9a-f]{12})。新形式、旧形式のどちらのメールアドレスで受け付けるかは config.phpの設定(MAIL_ADDRESS_HASHED)によって切り替えることができます。
新形式はメール投稿の際のFromメールアドレス偽装へのセキュリティ対策のために導入されたものです。 From偽装対策を(IP制限等により)メールサーバ側で行っている場合には旧形式での運用も問題ありません。
メールサーバの転送設定を利用して、これらのメールアドレスへのメールが、以下のコマンドにわたるように設定します。
"|/usr/bin/php OPENPNE_DIR/bin/mail.php"
で、これ、Postfixでの設定はVirtualで正規表現を使って渡すようにしているんですけど、レンタルサーバだとデフォルトメールでコマンドにメールを流すか、config.phpの「MAIL_ADDRESS_HASHED」を「false」にしてblog@MAIL_SERVER_DOMAIN宛のメールをコマンドに流すように設定するだけ、なんですよね。
が、いや、しかし、それが全然簡単じゃなかった。とりあえず、デフォルトメールでやってみたんだけど、問題が絞りきれなかったので「MAIL_ADDRESS_HASHED」を「false」にする方法ですすめました。cPanelで「メール管理ツール ::エイリアス/転送設定」から「宛先」で「プログラムへPIPE:」を選択、テキストエリアにmail.phpへのファイルパスを記入します。なんだか、コントロールパネルに注意書きとして、
プログラムへパイプするとき、ホームディレクトリから相対的なパスを記入します。もしスクリプトがPERLやPHPなどのインタープリターが必要な時は、"/usr/bin/perl, あるいは /usr/bin/php portion."をスキップします。あなたのスクリプトが実行可能であるのとスクリプトのトップに適当なHashbangが付いてあることを確認してください。もしHashbangの追加方法が分からない場合、スクリプトファイルが正しいエクステンションであるのを確認ください。すると、Hashbangが自動的に追加されたという表示が出ます。
こんなことが書かれているので、本当にmail.phpへの相対パスを書くだけ。なんだけど、エラーメールが帰って来ちゃう、、、。
pipe to |/xxx/xxx/bin/mail.php
generated by blog@xxx.xxx
local delivery failed
パスが間違ってるわけじゃないし、エラーメールとは言ってもメールアドレスに渡してからエラーになってるんだよね。ものすごく悩んだんだけど、さっきの注意書きをちゃんと読んでみると後半に謎の文章が、、、。
あなたのスクリプトが実行可能であるのとスクリプトのトップに適当なHashbangが付いてあることを確認してください。もしHashbangの追加方法が分からない場合、スクリプトファイルが正しいエクステンションであるのを確認ください。すると、Hashbangが自動的に追加されたという表示が出ます。
Hashbangってなんじゃいか? Wikipediaの英語版にリンクされてたんだけど面倒くさいので無視してました。が、どうにも行かなかったので、日本語のページを見てみてみて、ようやく内容を理解。ああ、インタプリタ指定をphpスクリプト内にしてあげなきゃいけないのね。配布パッケージには記載されていないので、mail.phpの先頭行に
#!/usr/bin/php
と追加したところ(サーバ環境によって異なります)、無事、携帯からの投稿完了です。うーむ、そういうことだったのか。
なんというか、もうちょっとなんだけどね説明。そこで、Wikipediaへのリンクとかじゃなければもっとスマートに出来たのにぃ。土日を挟んで5日間かけて設定完了に至りました、よかったよかったー。たぶん、デフォルトメールでやるパターンも、同じで出来るでしょうね('俺はやってないけど)。
というわけで、cPanel系のレンタルサーバでOpenPNEをインストールした際に携帯メールからの投稿に関する設定のお話しでした。
---
でも、ちょっと変なんだよね。再度さっきの注意書きなんだけど、さらに後半部分
あなたのスクリプトが実行可能であるのとスクリプトのトップに適当なHashbangが付いてあることを確認してください。もしHashbangの追加方法が分からない場合、スクリプトファイルが正しいエクステンションであるのを確認ください。すると、Hashbangが自動的に追加されたという表示が出ます。
そう、これってHashbangが記載されていなければスクリプトを設定した段階で、勝手にスクリプトの先頭行にHashbangが追加されるんじゃないかなぁ? 確かに、mail.phpを覗いてみたら、既に
#!/usr/local/bin/php
って書かれていたんだよね、、、。はじめは、管理者の人が途中まで頑張って自力でつけたと思い込んでいたんだけど、もしかしたらcPanelが間違ったphpのパスでHashbangをつけていただけかもしれない、、、。
これは、推測なので事実じゃないかもしれませんが、事実だとすればcPanel側で修正をしてもらいたいところだなぁ、、、。ちがう、そうじゃないわ。cPanelって、あくまでアプリケーションであってOSというかディストリビューションとかじゃないから(参照:cPanel インストールガイド)、cPanel側の問題じゃなくてディストリビューションに依存するのかも。や、それでもcPanelインストール時にセットアップしてくれれば問題なかったんだけどなぁ、、、。
とか、若干もやもやなお話しでした。
Zipper
初めまして、Cpanelでどうやって携帯投稿できるようにするか悩んでいてたどり着きました。
質問するにも恥ずかしいぐらいの初心者なんですが、
#!/usr/bin/php
の後の【サーバ環境によって異なります】とは、どういうことでしょうか?
ymkx
ああ、コメントほったらかしで済みません。
単純に、サーバによってそこに書き込む内容が異なるということですが、phpだったら
#!/usr/bin/php
か
#!/usr/local/bin/php
のどちらかでうまくいくと思います。