trash-area.com ≫ blog ≫ プログラミング ≫ php ≫ メール受信時にスクリプトを起動する
メール受信をトリガーにしてスクリプトを起動するメール駆動型アプリのメモです。
まぁ php にかかわらずなんでもいいはずです。
.forward を使うやり方はいくつかあるので cPanel で。
メールの設定 → フォワーダを追加。
「宛先」から 「プログラムへのパイプ」で起動したいスクリプトを指定してあげます。
その後、指定したスクリプトが勝手にフルパスに展開されるのでとりあえず適当に追加してみるといいと思います。
起動される(呼び出される)スクリプトのサンプルです。
#!/usr/local/bin/php < ?php $path = '/home/user_account/public_html'; chdir($path); require_once("./class.hoge1.php"); require_once("./class.hoge2.php"); require_once("./lib/class.common1.php"); $stdin = fopen ('php://stdin' , 'r'); while (!feof ($stdin)) { $line = trim(fgets($stdin, 4096)); $wmail .= "\n".$line; } fclose ($stdin); // $wmail にメール内容が入っているので、 // 「受信内容を解析して送信元に返信」などの処理をする。 ?> |
多分にサーバ環境とかも関係すると思いますが、
うちの環境ではまったところのポイントです。
1. コマンドライン版での動作になるので先頭行には hashbang として php までのパスを定義する。
# which php とかコントロールパネルで確認。
2. web用に作った他のスクリプトを include したかったりする場合、実行時のカレントディレクトリが違うので合わせてあげる。
3. 「プログラムへのパイプ」というように、メール内容のヘッダー/本文全てが標準入力から受け取れるので全部読む。
# 元ネタはどこかのサンプルなんですけど trim() がポイントみたいです。
# 意味わからないので trim() 外したら、メール送信時に「Could not instantiate mail function.」というエラーになり、だいぶはまりました。
4. web版の資産を再利用する場合、include するスクリプトの 「?>」 以降にスペースが入ってるとエラーになりました。
# スペースが標準出力に出力されてしまうようでよろしくないみたいです(?)。
全般的にシンタックスエラー以外は何が悪いのかはっきりしないとこが多くて結構難儀です。