• 締切済み

メールをトリガーにPHPを自動起動したい

PHPでも聞いてみたのですが、考えてみるとPHPと言うよりもLinuxのほうかもしれないということでお願いいたします 空メールの内容をPHPに渡したいと言うことで、いろいろ試してみましたが、なかなかうまくいきません Webminを使ってサーバの管理をしています MTAはsendmailを使っています sendmailの/etc/aliases にはこのように記述しました hoge: "|/usr/bin/procmail" /etc/procmailrc にはこのように記述しています PATH=/usr/bin:/bin:/usr/local/bin MAILDIR=/var/spool/mail LOGFILE=/var/www/html/****/procmail.log LOCKFILE=/var/www/html/****/procmail.lock :0 |/var/www/html/****/empty_mail_regist.php 私の考えでは hoge@hoge.comにメールが来る      ↓ sendmailが/usr/bin/procmailの起動      ↓ procmailが/etc/procmailrc を読み込んでプログラム実行 となると思っているのですが間違うでしょうか? /etc/aliases に hoge: "|/var/www/html/***/empty_mail_regist.php" と記述した場合、PHPのエラー(#!/usr/bin/php -q が抜けているなど)の場合はエラーメールが帰ってきます PHPにアクセスはしているが実行できていない理由がわかりません プログラム的なものだと思い、きめうちでメールを送るスクリプトを書きましたがダメでした もちろん、コマンドラインで実行するとメールの送信はできます スクリプトの所有者とメールアドレスのユーザは別なのでどれがダメなのかと思い、chownでhogeに変更してみましたが変わりはありませんでした 参考にしたサイトはこちらです メール配信時のPHPスクリプト起動(Sendmail編)http://www.dolphy.gr.jp/webap/topic/smrsh.html

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

メールを受け取ってからの処理は私はこんな感じにしてます。 function getStdin(){ $stdin = fopen("php://stdin", "r"); if (!$stdin) exit(); while ($line = fgets($stdin)) { $line = trim($line); $lines.=$line."\n"; } return $lines; } フローによって行ごとに配列でうけてもいいかもしれません。 なお挙動がつかみたいときは テストのメールデータをつくっておいてまさにパイプしてやれば よいでしょう。 cat mail.dat |/var/​www/html/***/empty_mail_regist.php

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

fオプションでどうでしょ? #!/パス/php -f

nyacube
質問者

お礼

解決しました! sendmailの/etc/aliases の記述に問題があったようです hoge: |/var/www/html/***/empty_mail_regist.php ↑これから↓コレに変更すると動き出しました hoge: "|/usr/bin/php /var/www/html/***/empty_mail_regist.php" smrshにPHPのシンボリックリンクを張っていたので、大丈夫だと思っていたのですが大きな勘違いですね… どうもありがとうございました

nyacube
質問者

補足

ありがとうございます #!/usr/bin/php -f に変更し少し前進したような気がします The original message was received at Tue, 15 May 2007 18:18:51 +0900 from mail.hogehoge.jp [***.***.***.240] ----- The following addresses had permanent fatal errors ----- |/var/www/html/***/empty_mail_regist.php (reason: 1) (expanded from: <hoge@hoge.jp>) ----- Transcript of session follows ----- Could not open input file: 554 5.3.0 unknown mailer error 1 こちらがソースの先頭部分です //メールソースを標準入力から読み込み $source = file_get_contents("php://stdin"); if(!$source) { echo "fail!\n"; exit(); } 標準ストリームでメールが渡されていないのでしょうか…

関連するQ&A