投稿

ラベル(maildrop)が付いた投稿を表示しています

さくらのレンタルサーバーで、実行ファイル添付のメールを削除(その3 完結)

その1 , その2 につづいて、実行ファイルチェックをチェックします その2までで、あとはphpでメールを分解して終了コードに何を渡すかだけなので、もっとよいコードがあると思いますが、最終形 の exemail.php です <?php // エラー表示 // ini_set('display_errors', 1); // ブロックする拡張子 $match_ext = array( 'com', 'bat', 'hta', 'js', 'docm', 'scr', 'dmg', 'exe'); // タイムゾーンとPEARのパス date_default_timezone_set('Asia/Tokyo'); set_include_path("/PEARスクリプトの場所/PEAR"); // PEAR require_once("Mail.php"); require_once("Mail/mimeDecode.php"); // メール取得 $data = file_get_contents("php://stdin"); // 標準入力から // $data = file_get_contents("/スクリプトの場所/exemail.eml"); // ファイルから(Webでテストする場合) // メール読み込み $params['input'] = $data; $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['crlf'] = "\r\n"; // 判定 $maildata =...

さくらのレンタルサーバーで、実行ファイル添付のメールを削除(その2)

その1 (pearインストール、phpと.mailfilterの動作確認)の続きです その1の動作チェックで保存した、実行型ファイルを添付したメールのソースファイル(下記では exemail.eml)を利用して Webから基本的なエラーやPEARの利用可を確認しておきます exemail.php を下記のように書き換えて、Webから開いてみます <?php // エラー表示 ini_set('display_errors', 1); // タイムゾーンとPEARのパス date_default_timezone_set('Asia/Tokyo'); set_include_path("/PEARスクリプトの場所/PEAR"); // PEAR require_once("Mail.php"); require_once("Mail/mimeDecode.php"); // メール取得 // $data = file_get_contents("php://stdin"); // file_put_contents("/スクリプトの場所/exemail.eml", $data); $data = file_get_contents("/スクリプトの場所/exemail.eml"); // メール着信の代わり // メール読み込み $params['input'] = $data; $params['include_bodies'] = true; $params['decode_bodies'] = true; $params['decode_headers'] = true; $params['crlf'] = "\r\n"; $maildata = Mail_mimeDecode::decode($params); echo "ok"; exit(1); ?> 上記の解説 // エラー表示 エラーの可視化 ...

さくらのレンタルサーバーで、実行ファイル添付のメールを削除(その1)

イメージ
さくらのレンタルサーバーで、ウィルスチェックを有効にしても、実行型ファイル、特にzipでくるんだメールが次々と入ってくる。最近は javaの脆弱性を突いた .js ファイルも大量に入ってくる。 Gmailみたいに、実行型ファイルはNGなフィルタがそのうち提供されるかもしれないが、待ってられない ということで、実行型ファイルが添付されたメールを振り落とす計画 ざっくりした構成は maildrop の .mailfilter から 実行型ファイルの添付を判断する phpスクリプトを呼び出して、その結果(リターンコード)からゴミ箱行きとする。です spamフィルタのように、ヘッダ記載を追加する方法も、基本的な流れは同じです→ こちらの記事 で動作の違いを確認してます まずは、下準備から PEARの導入 php からメールをバラす必要があるので 面倒ですがお決まりな PEARライブラリを導入します (一度入れておけば、メール関連の楽しみが増えるのでここはガマン) 基本的な導入方法は、 こちら にとても詳しく記載されています go-pear.php を置いて、Webから開く→自分でダウンロードしてくる さくらのコンパネから php.ini へパスなどを追記(timezoneもいれておくとよい) go-pear.php から追加パッケージをインストール 今回は、Mail/mimeDecode.php を使うので Mail_Mime と Mail_mimeDecode のパッケージを追加でインストールしておきます .mailfilter と phpの動きを確認 メール着信時の動作ということで、デリケートな作業になるため、.mailfilter と php の連携を予め確認しておきます まずは、下記のような exemail.php を作成して適当な場所へ置きます <?php // ini_set('display_errors', 1); $data = file_get_contents("php://stdin"); file_put_contents("/スクリプトの場所/exemail.eml", $data); // メールソースをファイルに保存 ...

maildrop の .mailfilter でスクリプト実行の種類

イメージ
maildrop の .mailfilter で スクリプト(今回は php) 実行させた時のメモ さくらのレンタルサーバーのメールで、独自のフィルタを作成するにあたって、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; は ...