postfix 受信時 php スクリプト実行
※一部、ドメイン名が隠れてなかったので再度投稿しました。
【環境】
os: freebsd 8.4
php: 5.4.13
postfix:2.9.5
メールの送受信はエラーなくできています。
【やりたいこと】
メール受信時にPHPスクリプトを実行したい!(メールでブログ上げたい!!!!)
【困っていること】
メールログみると、PHPが実行されずに”転送”しようとしている。
<maillog>
Jan 22 23:42:31 postfix/qmgr[36840]: from=<送信元>, size=38495, nrcpt=1 (queue active)
Jan 22 23:42:31 postfix/virtual[36877]: to=<|php /usr/home/ユーザー名/htdocs/実行したい.php@ドメイン>, orig_to=<送信先>, relay=virtual, delay=0.32, delays=0.31/0/0/0, dsn=5.1.1, status=bounced (unknown user: "|php /usr/home/ユーザー名/htdocs/実行したい.php@ドメイン")
※なぜか PHP 実行したいのに、PHPのパスのあとに@ドメインが!
このアドレスはあるわけないので送信元にエラーメールが戻ってきたのでした。
<エラーメール>
Undelivered Mail Returned to Sender
中略
<"|php /usr/home/ユーザー名/htdocs/実行したい.php"@ドメイン>
(expanded from <送信先>): unknown user: "|php
/usr/home/ユーザー名/htdocs/実行したい.php@ドメイン"
【試したこと】
バーチャルメールボックスなので
virtual_alias_maps(ファイル名:/usr/local/etc/postfix/virtual_alias) に 下記を記述しました。
blog@ドメイン | "/usr/local/bin/php /usr/home/ユーザー名/htdocs/実行したい.php"
そして、
postmap /usr/local/etc/postfix/virtual_alias
として、postfix stop → postfix start してメールを送信すると、上記エラーに…。
※blog@ドメイン までをバーチャルなユーザー名にしています。
(バーチャルドメインで現在2ドメイン運用しています。今回の「blog@ドメイン」というのはサーバのユーザーにはいなくてvirtual_mailbox_mapsに登録しているバーチャルなユーザーです。)
バーチャルなユーザーは ユーザーID:グループID を 5000:5000 としています。
実行したい.php は 持ち主 5000:5000 で、 パーミッション 744 です。
また、このPHPはファイルの書き込みをします。
書きこみ対象のフォルダのパーミッションは777にしてあります。
(持ち主はwww:www になっています)
あとで調べてみたらmain.cf の default_privs という項目が気になったので
サーバーのユーザーを指定してPHPもそのユーザーのものにしましたが
結果、なんらかわらなかったので元に戻しました…。
お礼
参照しました。 ==== クラスには、内容が理解できるような名前を指定するべきです。 略語の使用は 可能なかぎり避けます。 クラス名は、常に大文字で始めるべきです。 PEAR ク ラス階層は、クラス名にも反映され、各階層レベルは、 アンダースコアで区切 られます。良いクラス名の例を以下に示します。 ==== ==== Zend Framework では、クラスの名前が保存先ディレクトリに直接対応するよう な 命名規約を採用しています。ZF 標準ライブラリの最上位レベルのディレクト リは "Zend/" ディレクトリです。一方、ZF 追加ライブラリの最上位レベルのデ ィレクトリは "ZendX/" ディレクトリです。この配下に、すべてのクラスが階層 構造で保存されます。 ==== Javaでの考え方と同じですね。 #拡張ライブラリではjavaxとxをつけるところまで同じ。 適切なご回答、ありがとうございました。 自分のドメインを持っていますので、ドメインと機能分類をつけてクラス名にします。 #ただ勉強し始めたばかりなので、今のところは、このようにきちんとクラス名をつける必要もないのですが....。