人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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で設定でできるレンタルサーバーもご存じでしたら教えてください(共用の安い所)

●質問者: worldtravel
●カテゴリ:インターネット ウェブ制作
✍キーワード:Flock FP hoge HOME INDEX
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● moke3rd
●15ポイント

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

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

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

◎質問者からの返答

あっ すいません。

書き方がダメでしたね。

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

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

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

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


2 ● orz66
●50ポイント ベストアンサー

.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");

?>

◎質問者からの返答

できました!!!!!

600とは...

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

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

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


3 ● akide
●15ポイント

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

.mailfilterには

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

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

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

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

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

◎質問者からの返答

ありがとうございます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ