OpenPNE3+sendmail でケータイメール投稿に挑戦

訳あって、調べてみました。sendmailは全く触ったことないのですが・・

先人のみなさんのやり方を確認

ググるといろいろ出ますが、Ver2の情報が多いようです。
参考にさせていただいたのはこちら。
[OpenPNE] sendmail で携帯からのメール投稿を設定する方法 | Sun Limited Mt.
sendmailについてはこちら。ドメイン名やサンプルのメアドが素晴らしいです。komo繋がりということで。
http://www.komonet.ne.jp/~linux/sendmail/gaiyou.htm

まずは情報を列記

とりあえず、整理する準備としてつらつら書いてみます。

sendmail側と思われるもの
  • /etc/mail/local-host-names
    • 受け取るべきドメイン名の一覧を記述しておくファイル。ホスト名と異なる場合など。
sns.example.com
  • /etc/mail/virtusertable
    • メールアドレスを見て配送先を振り分ける、バーチャルユーザーテーブル
@sns.example.com sns-ktai@example.com
  • virtusertable を変更後は下記コマンドを実行して設定を反映させてください。
    • これは定義ファイルを.dbファイルに反映させパフォーマンスを上げるため、と解釈しました
# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable
  • /etc/aliases
    • sns-ktai」を別処理(openpneのmail.phpスクリプト)に振り分けるために記述
    • なお、コレはOpenPNE2の記述です
sns-ktai: "| php /path/to/openpne/bin/mail.php"
  • aliases を変更後は下記コマンドを実行して設定を反映させてください。
    • makemapと似たようなもの?と解釈
# newaliases

php の部分を /usr/bin/php とかフルパスにしても同じです。sendmail が実行する smrsh というのが sh よりも厳しいらしく実行時にエラーになってしまいます。そこで、 /etc/smrsh 以下に /usr/bin/phpシンボリックリンクを作ることにより回避できます。

$ ln -s /usr/bin/php /etc/smrsh/php
これはどっちだ?
define('MAIL_SERVER_DOMAIN', 'example.com');
    • OpenPNEの設定ファイルでした。
OpenPNE

こちらを参考にさせていただきました。※これはOpenPNE3の記述です
OPVC04 携帯メール投稿のセットアップ|OpenPNEの手嶋屋

openpne_user: "| cd /path/to/openpne/ && php /path/to/openpne/symfony openpne:execute-mail-action"

手嶋社長のブログでは、Postfixがメールサーバとなっており、パイプでつなげてOpenPNEにメールを渡しています。
中を見るとOpenPNEディレクトリに移動してから、引数として「execute-mail-action」を渡して、symfonyフレームワークに処理を依頼しているようです。

sendmailについてもう少し調べてみた

「&&」について

Postfixでは「&&」でチェンジディレクトリとphpの実行を連続して書いていますが、sendmailだとどう書くのだろうと思い調べてみました。

「これだ!」と明確に書いているサイトは見つからなかったのですが、「&&」でつなぐのはどうやら共通のようです。なので、大丈夫だろう、ということで。クウォートしている中身はAPLには関係なく、Linuxコマンドの世界で動くもの、と解釈しました。

何が渡されるの?

直接関係はなさそうですが気になったので。百式さんのサイトが参考になりました。
PHPとsendmailで任意のメールアドレスに来たメールを処理する方法 | IDEA*IDEA
「4.さてPHP」でのところにありますが、フツーに標準出力からもらっているようです。なので、PHPコード側では「stdin」標準入力から読み出しと考えればよさそうです。

整理してみた

メールサーバの使い方は、OpenPNEのバージョンには左右されないはずなので、Ver2での先人のみなさんのノウハウをそのまま拝借。Ver3ではメールサーバからの流し込み先の処理が違う(Ver2はフツーのphp、Ver3はsymfony経由)ので、alias定義だけVer3用に変更。これでいけるのでは??

ということで、まとめてみると、

Sendmail側の設定
sns.example.com
  • /etc/mail/virtusertable
    • xxxxxxx@sns.example.com のメールの振り分け先をバーチャルユーザーテーブルに登録
@sns.example.com sns-ktai@example.com
    • 反映
# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable
  • /etc/aliases
sns-ktai: "| cd /path/to/openpne/ && php /path/to/openpne/symfony openpne:execute-mail-action"
    • 反映
# newaliases
  • php /path/to/openpne/bin/mail.phpが実行されない件の対策
    • /etc/smrsh に php へのシンボリックリンクを作成
      • OpenPNEがVer2でもVer3でも、引数が変わっているだけで実行プログラムは「php」なので変更なし
    • phpの在り処が違うなら「/usr/bin」を適切なパスに変更
    • cd については大丈夫じゃないの?
# ln -s /usr/bin/php /etc/smrsh/php
OpenPNE側の設定
define('MAIL_SERVER_DOMAIN', 'example.com');

とここまで書きましたが

まだ、なんにもテストとかはしてません。これからです・・・