maildrop の .mailfilter でスクリプト実行の種類
maildrop の .mailfilter で スクリプト(今回は php) 実行させた時のメモ
さくらのレンタルサーバーのメールで、独自のフィルタを作成するにあたって、php の実行方法(2種類)による動作の違い
xfilter で php スクリプトを呼び出した場合
.mailfilter
test.php
結果
シングルクォーテーション(&H60) で php スクリプトを呼び出した場合
.mailfilter
test.php
結果
呼び出し方法による、用途の違い
xfilter
メールソース(ヘッダ追記など)を書き換えて、ヘッダになにか残したりする場合は xfilter を利用
その名の通り、フィルターなので stdout や echo でメール内容を出力しなければ、データが消失します
プログラムが異常終了した場合、メールが到着しない可能性がある
シングルクォーテーション
メールソースを変更する必要がなく、メール内容や着信イベントでプログラムを動作させ、結果の終了コードで分岐を行ったり、プログラムから別のメールを送信するなどの用途
stdin でメールソースを受け取るが、stdout は不要(出力しても無視される)
プログラムが異常終了しても、メールが到着するため比較的安全
さくらのレンタルサーバーのメールで、独自のフィルタを作成するにあたって、php の実行方法(2種類)による動作の違い
xfilter で php スクリプトを呼び出した場合
.mailfilter
xfilter "/usr/local/bin/php /home/HOHOHO/www/FUFUFU/test.php" if ($RETURNCODE == 1) { to "maildir/.Trash/" }
test.php
<?php $data = file_get_contents("php://stdin"); file_put_contents("php://stdout", $data); // exit(1); return 1; ?>
結果
- php で return 1; も exit(1); も $RETURNCODE へ値が反映されない(常に0)
- stdout を行わないとメールが消失する(stdin → stdout をセットで利用)
echoで出力してもok - stdout で出力した結果(メールソース)がその後利用される → ヘッダに結果を残すなど
- exit(1); を使うと stdout が動作していない様子 → メールが消失する
シングルクォーテーション(&H60) で php スクリプトを呼び出した場合
.mailfilter
`/usr/local/bin/php /home/HOHOHO/www/FUFUFU/test.php` if ($RETURNCODE == 1) { to "maildir/.Trash/" }
test.php
<?php $data = file_get_contents("php://stdin"); // file_put_contents("php://stdout", $data); exit(1); ?>
結果
- php で return 1; は $RETURNCODE へ値が反映されない
- php で exit(1); は $RETURNCODE へ値が反映される
- stdout を行う必要はない(出力しても無視される)
呼び出し方法による、用途の違い
xfilter
メールソース(ヘッダ追記など)を書き換えて、ヘッダになにか残したりする場合は xfilter を利用
その名の通り、フィルターなので stdout や echo でメール内容を出力しなければ、データが消失します
プログラムが異常終了した場合、メールが到着しない可能性がある
シングルクォーテーション
メールソースを変更する必要がなく、メール内容や着信イベントでプログラムを動作させ、結果の終了コードで分岐を行ったり、プログラムから別のメールを送信するなどの用途
stdin でメールソースを受け取るが、stdout は不要(出力しても無視される)
プログラムが異常終了しても、メールが到着するため比較的安全
コメント