• 締切済み

メールをトリガーに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

  • メールをトリガーとして....

    Linuxでメールをトリガーとしてプログラムを動かしたいと思ってます。 「/etc/aliases」に「mailuser: "| /usr/bin/php -f /tmp/test.php"」を追加してもtest.phpは動かず、メールも届きません。 「/etc/aliases」に「mailuser: admin」としてみるとメールがadminに届いてほしいのですが、mailuserに1通届きます。 「/etc/aliases」に「mailuser: mailuser, admin」を追加するとメールがmailuserとadminに届いて欲しいのですが、mailuserに2通届きます。 「/etc/aliases」変更ごに「newaliases」は実行してます。 「PHP Version 5.1.6」「sendmail Version 8.13.8」で、VPSです。 どうして思うようにうごかないのでしょうか?

  • PHP+sendmailによるメール自動返信

    お世話になります PHPとsendmailを使ってメール自動返信(空メール登録)の仕組みを作っています いろいろ試行錯誤しながら、エラーメールが帰ってこないところまでは何とかいけたのですが、PHPが動いているそぶりが無いので困っております 本来は自動的にメールを返信するものですが、動作確認のためにこのようなログを吐き出すPHPをキックしています PHPにエラーがある場合はエラー内容がfatalerrorでメールが帰ってきます 以下のようにPermission deniedも帰ってくるので、PHP自体にはアクセスできていると思うのですがそこから先がわかりません ----- The following addresses had permanent fatal errors ----- |/var/www/html/log_test.php (reason: 126) (expanded from: <user@hoge.jp>) ----- Transcript of session follows ----- sh: |/var/www/html/log_test.php: Permission denied 554 5.3.0 unknown mailer error 126 ■/etc/aliasesの記述 user: |/var/www/html/log_test.php ■log_test.phpの内容 #!/usr/bin/php -q <?php require_once 'Log.php'; $conf = array('mode' => 0777, 'timeFormat' => '%X %x'); $file = &Log::factory('file', '/var/www/html/out.log', 'TEST', $conf); $file->log('ログ内容'); ?> 以下のコマンドも実行しています # cd /etc/smrsh # ls -la # ln -s /usr/bin/php ./php こちらを参考にしました↓ メール受信時にperlを実行(sendmail) http://lab302.blog65.fc2.com/blog-entry-96.html

    • 締切済み
    • PHP
  • メールをトリガーにPHPを実行したい

    初めまして、メールをトリガーにPHPを実行したいと思い、 下記のように.forwardを書きました。 ドメイン:example.com アカウント:hogehoge メールアドレス:info@hogehoge.example.com \info: "|user/bin/php /home/hogehoge/public_html/index.php" ですが、info@hogehoge.example.comにメールを送信しても実行してくれません。 どのように記述すれば良いのでしょうか? 環境 Linux Root /home/hogehoge Sendmail /usr/sbin/sendmail よろしくお願いします

  • PHP の system コマンド

    ブラウザからtest.php を実行してperl スクリプトを実行したいのですが、 うまく動きません。アクセス権の問題なのでしょうか。 よろしくお願いします。 ---------------- test.php ---------------------- <? system("/usr/bin/perl /home/usr/public_html/test.pl > /dev/null &"); echo "OK."; ?> ---------------- End File ---------------------- ---------------- test.pl ----------------------- #!/usr/local/bin/perl $sendmail = '/usr/sbin/sendmail'; open(SENDMAIL,"| $sendmail -t -i"); print SENDMAIL <<'END'; From: hoge@hoge.com To: moga@moga.com Subject: test Hello This is test END close(SENDMAIL); --------------------- End File -------------------------

    • ベストアンサー
    • PHP
  • メールの受信をトリガーとしてperlを起動させたい

    メールの受信をトリガーとしてperlを起動させたいと考えています。 vine linux 4.0 で MTAはpostfix 2.2.10 のみが入っています。 /etc/postfix/aliases に root: "|/usr/bin/perl /root/test.cgi" と書いて postfix reload した後 root 宛にメールをすると、メール自体は普通に届きますが perlは起動しません。 test.cgi 自体は直接叩いてやると、ちゃんと動いています。 main.cf には alias_maps = hash:/etc/postfix/aliases と記述してあります。 メール受信で perlを起動させるにはどうしたらよいのでしょうか?

  • CentOSにてpostfixの設定

    CentOSにpostfixを導入し、メール受信をトリガーにシェルスクリプトを起動させたいと考えています。 レンタルサーバの為postfixが無かったのでyum install postfixでinstallしました。 その後の設定ですがイマイチ分からずとりあえず他のサイトを色々みてやったのですが、うまく動きません。 /etc/aliases にviエディタにて hoge.hoge.hoge: | "/usr/local/hoge/bin /usr/local/hoge/bin/sh restart.sh" を記述しました。 /etc/postfix/main.cf 上記設定ファイルには下記を有効にしています。 ・queue_directory = /var/spool/postfix ・command_directory = /usr/sbin ・daemon_directory = /usr/libexec/postfix ・mail_owner = postfix ・myhostname = hogehoge.com ---->同じでOK? ・mydomain = hogehoge.com ---->同じでOK? ・myorigin = $mydomain ・inet_interfaces = all ・mydestination = $mydomain, $myhostname ・unknown_local_recipient_reject_code = 550 ・alias_maps = hash:/etc/aliases ・alias_database = hash:/etc/aliases ・recipient_delimiter = - ・debug_peer_level = 2 ・debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5 ・sendmail_path = /usr/sbin/sendmail.postfix ・newaliases_path = /usr/bin/newaliases.postfix ・mailq_path = /usr/bin/mailq.postfix ・setgid_group = postdrop ・html_directory = no ・manpage_directory = /usr/share/man ・sample_directory = /usr/share/doc/postfix-2.3.3/samples ・readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES /var/log/maillog には何も記載されていませんでした。 MTAもpostfixに設定しました。(system-switch-mailにて) /var/log/messages にも何も記載されていませんでした。 /etc/aliaesも変更しました hoge.hoge.hoge: | "/usr/bin /usr/local/hoge/bin/restart.sh" と一行追加しています。追加後 newaliaesも実行しDBも更新しています。 goge.hoge.hoge@example.comに携帯からメールを送信すると宛先不明等のメールは返ってきません なのでメールは受信できているのかとも思ったのですが /var/mail/hoge.hoge.hoge は0バイトになっているので受信していないようです。 レンタルサーバーのVPSを使っています。 そこでgoge.hoge.hoge@example.comのメールアドレスは作成済みです。 基本的な事は確認したつもりです。 postfixは起動しています。 MTAもpostfixに設定しました。 気になるのが、main.cfの設定です。 myhostname と mydomain が同じであることです。 どうぞ、ご教授の程宜しくお願い致します。

  • procmailrcでの自動返信 catが使えない

    こんにちは、いろいろ調べたのですが どうしてもわからなくて質問させていただきます。 題名の件ですが、procmailのログに[cat: Permission denied] と出てきて、自動返信ができません。メールは届きます。 catが見る先のファイルのアクセス権は問題有りません。 レシピの記述は次のようになっています。 ▼.procmailrc記述 PATH=/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin:/pub/bin:. SHELL=/bin/sh MAILDIR=$HOME/Maildir/ DEFAULT=$MAILDIR LOCKFILE=$HOME/.lockmail SENDMAIL=/usr/sbin/sendmail MAIL=/home/test/mail.txt LOGFILE=$HOME/procmail.log SH=/home/test FORMAIL=/usr/bin/formail :0 h c * ^TO_test@xxxx.or.jp #* ^From:.*test@xxxx.or.jp * !^FROM_DAEMON * !^X-No-Loop: test@xxxx.or.jp |(/usr/bin/formail -r -A "X-No-Loop: test@xxxx.or.jp" \ -A "Precedence: test" ;\ cat $MAIL) |\ $SENDMAIL -t ▲以上が記述です。 たとえば、ユーザモードで下記のコマンドをたたくと mail.txtの内容を読み込んでくれて、メールが配信されます。   ★cat /home/test/mail.txt | /usr/sbin/sendmail -t★ 環境は  FreeBSD 6.1-RELEASE+qmail.1.03となっております。 もしわかる方がいらっしゃいましたら ご教授いただければと思います。

  • #!/usr/local/bin/phpはどこに書くのですか?

    phpでWebページを作っています。 レンタルサーバーのマニュアルに「PHPで記述したCGIスクリプトの1行目に #!/usr/bin/phpまたは #!/usr/local/bin/phpと記述して下さい。 」とありますが、hoge.phpの「<?php ~ ?>」の「<?php」の次の行に書くのでしょうか?それとも前の行に書くのでしょうか? また、hoge.phpの中身が「<html><head></head><body> ~ <?php ~ ?> ~ </body></html>」の場合はどこに記述するのでしょうか? 初心者的な質問ですみませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • シェルスクリプトでユーザ指定

    メールサーバにメールが届くと、固定の指定ユーザでPHPのファイルを実行するというシステムを作っていて質問があります。 Sendmailのaliasesでmlexe.shというシェルスクリプを起動して、シェルスクリプト内で指定したユーザu02でmls.phpを起動させようとして以下のスクリプトを作りました。 #!/bin/sh su u02 -c "/usr/bin/php /usr/local/apache/phtml/msv/mls.php" exit 3行目のexitは必要なんでしょうか?念のために書いているんですが。 これで準備ができたので、aliasesに設定したアドレスにメールを出しました。 すると、エラーが発生したというメールが返ってきました。その内容には ----- Transcript of session follows ----- Password: Sorry と書かれていたので、シェルスクリプトを実行したroot?がu02のパスワードが分からなかったのが原因だと思うのですがそうなんでしょうか? シェルスクリプトにu02のパスワードが必要なんですか?

  • /etc/aliasesからphpを呼んだ場合、$_SERVERが取れません。

    /etc/aliasesから呼ばれたPHPで 開発機か本番機かを判別したいので、$_SERVERを 取得したいのですが取得できません。。 何か取得する方法はないでしょうか? ■/etc/aliases test: "| php /test.php ■test.php #!/usr/bin/php <?php mb_send_mail("a@a.com","",print_r($_SERVER)); ?>

    • 締切済み
    • PHP