まずは ~/.procmailrc で procmail の設定を書こう。
SENDMAIL=/usr/sbin/sendmail KEITAI=yyyyy@docomo.ne.jp .... .... .... # ************************************************ # 携帯に転送する xxxxx@gmail.com 宛メールの処理 :0 * ^(To|Cc).*xxxxx@gmail.com | /home/aaaa/bin/rm_ad_advert.pl | $SENDMAIL -oi $KEITAIここで$KEITAIは携帯のメールアドレス,$SENDMAILは sendmail コマンドをフルパスで指定している。また,メールは gmail へ送られたものを,このサーバーに転送して処理をさせている。
最初の「:0」が処理の開始を示している。次の「* 」で始まる行で該当するメールを正規表現で判定している。ここでは,「To」フィールドまたは「Cc」フィールドが「xxxxx@gmail.com」となっているメールを対象にしている。その次の行が肝心の処理をしている部分で,パイプでメールを外部スクリプトに送り込み,その結果を sendmail コマンドで携帯に転送している。
では,肝心の処理スクリプトの中身はというと以下のようにしてみた。
while (<STDIN>) { $input = $_; chomp($input); if ($input =~ /^\[PR\]/) { while (<STDIN>) { $input = $_; chomp($input); if ($input =~ /\x21\x3d\x21\x3d\x21\x3d\x21\x3d/) { $input = <STDIN>; chomp($input); last; } } } if ($input !~ /\x21\x3d\x21\x3d\x21\x3d\x21\x3d/) { if ($input ne '') { print $input."\n"; } } else { exit; } }まず,パイプ処理で入力させるので,読み込むファイルは標準入力から読み込む。そのため「<STDIN>」で読み込んでいる。後は,先頭が「[PR]」で始まる行があれば,それ以降を数行読み飛ばして捨てている。広告の終わりは全学のロングダッシュ「―」が並んでいる行なのだが,その判定条件として「¥x21¥x3d」を用いている。これは JIS コードでの「―」を表している。そのまま「―――――」と記述しても,マッチしないとして広告の後ろの部分が全部処理されずに終わってしまった。文字コードは難しいねぇ。また,肝心の取締り情報の終わりもロングダッシュが複数並んでいるので,それ以降は処理しないで終了している。
0 件のコメント:
コメントを投稿