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で設定でできるレンタルサーバーもご存じでしたら教えてください(共用の安い所)
.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: [email protected]");
?>
プログラムだけでなくメールボックスにも渡すには'To'ではなく'Cc'を使ってください。
>プログラムに渡しつつ、受信した(プログラムから戻ってきたものではない)メールをそのままメールボックスにも入れたいならccで。
http://faq.sakura.ne.jp/wiki/wiki.cgi?%A5%E1%A1%BC%A5%EB#i29
あっ すいません。
書き方がダメでしたね。
メールをそのままメールボックスに残すのは問題ではなく、プログラムを起動してメールの内容を別のファイルに書き出したいのです。
が、別のファイルに書き出されることなくメールも消えてしまうと言うことです。
このURLにある説明のto、ccの違いも理解しています。
ちなみにccにしても同様の結果になります。
.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: [email protected]");
?>
できました!!!!!
600とは...
以前どこかのサーバーでは(そこは.forwardでしたが)604でないと動かなかったので604や644で試していました。
いやーーー半日近く悩んでいたのが信じられません。
ありがとうございました。
さくらで.mailfilterを使ってcgiにメールを渡す環境でWEBを公開しているものです。
.mailfilterには
to "| /usr/bin/php -q /home/acount/hoge/index.php"
で問題なく、プログラムまでメールは渡ります。
問題は記述しているphpがエラーを起こしているため渡ったメールが削除と言うか役割を果たし消去されます。
メールをトリガーにしてPHPを動かしたいのであれば、
確実に動くphpで動作確認することをおすすめします。
ありがとうございます。
orz66 さんのご指摘の通り 600で動作しました。
できました!!!!!
600とは...
以前どこかのサーバーでは(そこは.forwardでしたが)604でないと動かなかったので604や644で試していました。
いやーーー半日近く悩んでいたのが信じられません。
ありがとうございました。