SAKURAでメールを受信する毎にプログラムを起動したいのですが上手くいかずに困っております。


SAKURAの場合は「.forward」ではなく「.mailfilter」に書くとできるという情報を知り試しましたが思い通りに動作しません。
具体的にはメールが消えてしまいます。(削除されていると思いますが...)

下記のように書いて試しています

「.mailfilter」(1行ずつ試しています)
to "| /usr/bin/php -q /home/acount/hoge/index.php"
to "| /home/acount/hoge/index.php"
"| /home/acount/hoge/index.php"


「/home/acount/hoge/index.php」
#!/usr/local/bin/php
<?
set_time_limit(0);
$stdin = fopen("php://stdin", "r");
while(!feof ($stdin)){
$mail .= fgets($stdin, 4096);
}
fclose ($stdin);

$fp = fopen('/home/acount/hoge/data/mail.txt', "a");
set_file_buffer($fp, 0);
flock($fp, 2);
fwrite($fp, $mail);
flock($fp, 3);
fclose($fp);
?>


参考にしたURL
http://q.hatena.ne.jp/1128498655
http://faq.sakura.ne.jp/wiki/wiki.cgi?%A5%E1%A1%BC%A5%EB#i29

「私はこうやって今現在動作している」という具体的な方法やコードを教えてください。


また.forwardで設定でできるレンタルサーバーもご存じでしたら教えてください(共用の安い所)

回答の条件
  • 1人2回まで
  • 登録:2006/12/28 13:26:28
  • 終了:2006/12/28 14:27:37

ベストアンサー

id:orz66 No.2

orz66回答回数106ベストアンサー獲得回数112006/12/28 14:01:39

ポイント50pt

.mailfilterのパーミッションを600にしてありすか?

意外と忘れがちで僕もはまりました。

僕の.mailfilter

to "| /home/acount/hoge/kara.php"

kara.php(空メール応答用)

#!/usr/local/bin/php -q


require_once('/home/acount/hoge/Mail/mimeDecode.php');


$source = file_get_contents("php://stdin");

if(!$source)

{

echo "fail!\n";

exit();

}


$params['include_bodies'] = true;

$params['decode_bodies'] = true;

$params['decode_headers'] = true;

$decoder = new Mail_mimeDecode($source);

$structure = $decoder->decode($params);

$from = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), mb_internal_encoding(), "auto");

if( preg_match( '/<([^>]+)>$/', $from, $regs )){ $from=$regs[1]; }

$from = strtolower($from);


$body = "https://hoge.com/user_regist.php?mail=" . rawurlencode($from);


mb_internal_encoding("utf-8");

mb_language("japanese");

mb_send_mail($from, "empty_mail", $body, "From: admin@hoge.com");

?>

id:worldtravel

できました!!!!!

600とは...

以前どこかのサーバーでは(そこは.forwardでしたが)604でないと動かなかったので604や644で試していました。

いやーーー半日近く悩んでいたのが信じられません。

ありがとうございました。

2006/12/28 14:26:35

その他の回答(2件)

id:moke3rd No.1

moke3rd回答回数34ベストアンサー獲得回数32006/12/28 13:47:17

ポイント15pt

プログラムだけでなくメールボックスにも渡すには'To'ではなく'Cc'を使ってください。

>プログラムに渡しつつ、受信した(プログラムから戻ってきたものではない)メールをそのままメールボックスにも入れたいならccで。

http://faq.sakura.ne.jp/wiki/wiki.cgi?%A5%E1%A1%BC%A5%EB#i29

id:worldtravel

あっ すいません。

書き方がダメでしたね。

メールをそのままメールボックスに残すのは問題ではなく、プログラムを起動してメールの内容を別のファイルに書き出したいのです。

が、別のファイルに書き出されることなくメールも消えてしまうと言うことです。

このURLにある説明のto、ccの違いも理解しています。

ちなみにccにしても同様の結果になります。

2006/12/28 14:00:54
id:orz66 No.2

orz66回答回数106ベストアンサー獲得回数112006/12/28 14:01:39ここでベストアンサー

ポイント50pt

.mailfilterのパーミッションを600にしてありすか?

意外と忘れがちで僕もはまりました。

僕の.mailfilter

to "| /home/acount/hoge/kara.php"

kara.php(空メール応答用)

#!/usr/local/bin/php -q


require_once('/home/acount/hoge/Mail/mimeDecode.php');


$source = file_get_contents("php://stdin");

if(!$source)

{

echo "fail!\n";

exit();

}


$params['include_bodies'] = true;

$params['decode_bodies'] = true;

$params['decode_headers'] = true;

$decoder = new Mail_mimeDecode($source);

$structure = $decoder->decode($params);

$from = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), mb_internal_encoding(), "auto");

if( preg_match( '/<([^>]+)>$/', $from, $regs )){ $from=$regs[1]; }

$from = strtolower($from);


$body = "https://hoge.com/user_regist.php?mail=" . rawurlencode($from);


mb_internal_encoding("utf-8");

mb_language("japanese");

mb_send_mail($from, "empty_mail", $body, "From: admin@hoge.com");

?>

id:worldtravel

できました!!!!!

600とは...

以前どこかのサーバーでは(そこは.forwardでしたが)604でないと動かなかったので604や644で試していました。

いやーーー半日近く悩んでいたのが信じられません。

ありがとうございました。

2006/12/28 14:26:35
id:akide No.3

akide回答回数4ベストアンサー獲得回数02006/12/28 14:11:48

ポイント15pt

さくらで.mailfilterを使ってcgiにメールを渡す環境でWEBを公開しているものです。

.mailfilterには

to "| /usr/bin/php -q /home/acount/hoge/index.php"

で問題なく、プログラムまでメールは渡ります。

問題は記述しているphpがエラーを起こしているため渡ったメールが削除と言うか役割を果たし消去されます。

メールをトリガーにしてPHPを動かしたいのであれば、

確実に動くphpで動作確認することをおすすめします。

id:worldtravel

ありがとうございます。

orz66 さんのご指摘の通り 600で動作しました。

2006/12/28 14:27:03

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません