
procmailを使って、本文を変数に格納します。
procmailフラグ「b」…メールの本文をアクションに渡す
:0b { BODY = `sed -e ' 1,/^$/ d'` }
以上で変数$BODY
に本文が格納されます。
参考URL: http://jo1upk.blogdns.net/linux/?%E3%82%BD%E3%83%95%E3%83%88%2Fprocmail%2Fformail

procmailを使って、本文を変数に格納します。
procmailフラグ「b」…メールの本文をアクションに渡す
:0b { BODY = `sed -e ' 1,/^$/ d'` }
以上で変数$BODY
に本文が格納されます。
参考URL: http://jo1upk.blogdns.net/linux/?%E3%82%BD%E3%83%95%E3%83%88%2Fprocmail%2Fformail
Procmailにてレベルを定義し振り分けをおこなう方法と
ORによる条件判定の方法。
LEVEL=2
レベル2のとき適用
:0 * $LEVEL ?? 2 { # 逆引きできないホストを経由したメールの場合 :0Hfw * ^Received: .*from.*unknown | formail -I "X-Spam-Flag: True" }
エンベロープ(封筒)とは、電子メールメッセージの配送の際にメール本体に付加されるデータで、送信者と宛先の2つあります。
これはメールヘッダーに付加される情報とは異なり、実際の配送に使われる情報です。
送信者はMAIL FROM:、宛先はRCPT TO:となります。
ここに設定される情報は通常、メーラーでは見れないが、
メールヘッダーのReturn-Path:にMAIL FROM:の内容が、Received:にRCPT TO:の内容が記録されていることがあります。
エンベロープの送信者・宛先はメッセージの配送に使われる実際の送信者・宛先であり、ヘッダーに書かれているものとは異なる場合がある。つまりいくらでも詐称することが可能ということである。
送信元メールアドレスの取得が不完全だったので、訂正します。
確かな情報を得るため、ヘッダーからではなく、エンベロープから取得するように。
オプションもいらないと思います。
訂正前
#送信元アドレスを変数$FROMに格納 #sedコマンドで表示名、スペース、<>を除去(無効) :0fwH * ^From: \/.* { FROM = $MATCH #FROM = `echo $FROM | sed s/\".*\"//` #FROM = `echo $FROM | sed s/[[:space:]]//g` #FROM = `echo $FROM | sed s/\\<//g | sed s/\\>//g` }
訂正後
※[]の中は^・半角スペース・タブです。
#送信元アドレスを変数$FROMに格納 :0 *$ ! ^From *\/[^ ]+ { FROM = `formail -x From:` } :0E { FROM = $MATCH }
Reply-To:・Sender:も取得する場合
#送信元アドレスを変数$FROMに格納 :0 *$ ! ^Reply-To: *\/[^ ].* *$ ! ^Sender: *\/[^ ].* *$ ! ^From *\/[^ ]+ { FROM = `formail -x From:` } :0E { FROM = $MATCH }
ドメインを取得する場合(@を含む)
:0 *$ ^From *\/[^ ]+ { # @以前を除去 DOMAIN = `echo "$MATCH" | sed s/.*@/@/g` }
maillogにprocmailのエラーが出ていたのでメモ
エラー
procmail: Extraneous filter-flag ignored
原因
:0fwH /dev/null
環境:qmail+vpopmail+procmail
procmailを利用してブラックリストを作成します。
まず、適当なディレクトリに空のファイルを作成します。
(ここでは/usr/tmp/.blacklistとしています)
メールアドレスをブラックリストに追加するには、
件名に追加したいメールアドレス、本文に1行でパスワード(pw=00000000の形式)を
入力し、bl@example.jp宛に送信するようにしています。
送信元アドレスも指定されたドメインからのみに指定しています。
#/home/vpopmail/domains/example/bl/.procmailrc SHELL=/bin/sh #ファイルに書き込むため必須 PATH=/bin:/usr/bin:/usr/local/bin HOME=/home/vpopmail/domains/example/bl MAILDIR=$HOME/Maildir DEFAULT=$HOME/Maildir/ #LOGFILE=$MAILDIR/procmail.log LOCKFILE=$MAILDIR/procmail.lock # ブラックリストファイルのパス BLACKLIST=/usr/tmp/.blacklist # 送信元アドレスを判断 :0H * ! ^From: .*@example.jp /dev/null # 本文中のパスワードをチェック :0B * ! ^(pw|Pw|pW|PW)=00000000 /dev/null # 件名の有無をチェック([]内は^・半角スペース・タブ) :0 *$ ! ^Subject: *\/[^ ].* { ADDBL = `formail -x Subject:` } # 件名を変数に格納 :0E { ADDBL = $MATCH } # 送信されたアドレスが既にブラックリストにあるかチェック :0 * ? test -s $BLACKLIST * ? echo "$ADDBL" | fgrep -iqwf $BLACKLIST /dev/null # ブラックリストに未登録なら追加 :0E | echo $ADDBL >> $BLACKLIST && echo >> $BLACKLIST # 色んなところで紹介されているのは、1行ずつ開けて登録するようになっているが # 行が開いていなくても改行されていればいけるようなので以下でも可 | echo $ADDBL >> $BLACKLIST
レシピを共有化できないかと模索していたら、見つかったので記しておきます。
適当なディレクトリ(ここではetc)に共有するレシピを作成します。
#/etc/procmailrc #環境変数の設定 PATH=/usr/bin:/usr/local/bin MAILDIR=$HOME/Maildir DEFAULT=$HOME/Maildir/ #LOGFILE=$MAILDIR/procmail.log #省略するとログを記録しない LOCKFILE=$MAILDIR/procmail.lock #空のヘッダーを削除 :0Hfw | formail -z #日本語メールのみ受け付ける :0Hfw * ! ^Content-Type: .*(iso-2022-jp|multipart/mixed;) * ! ^Subject: .*(iso-2022-jp|utf-8|euc-jp|shift_jis) * ! ^FROM_DAEMON | formail -I "X-Spam-Flag: YES" :0Hfw * ^Content-Type: .*(US-ASC|iso-8859-1) | formail -I "X-Spam-Flag: YES" #容量制限:60MBまで :0Hfw * > 60000000 | formail -I "X-Spam-Flag: YES" #よくあるスパムメールを除去 :0Hfw * ^From: .*<(_|-) | formail -I "X-Spam-Flag: YES" #Fromがないもの :0Hfw * ! ^From: .* | formail -I "X-Spam-Flag: YES" #アドレス詐称対策 #Message-IDがなく宛先と送信元が自分自身のアドレスなら #返す先がないので削除 :0Hfw * ! ^Message-ID: .* * $ ^To: .*$ME.* * $ ^From: .*$ME.* | formail -I "X-Spam-Flag: YES" #送信元メールサーバーのDNS名前解決ができないとき :0Hfw * ^Received: .*from unknown | formail -I "X-Spam-Flag: YES"
環境:qmail+vpopmail
迷惑メール対策
.procmailrc
基本設定
#/home/vpopmail/domains/example.jp/username/.procmailrc #環境変数の設定 PATH=/usr/bin:/usr/local/bin HOME=/home/vpopmail/domains/example.jp/username MAILDIR=$HOME/Maildir DEFAULT=$HOME/Maildir/ LOGFILE=$MAILDIR/procmail.log #省略するとログを記録しない LOCKFILE=$MAILDIR/procmail.lock VERBOSE=ON #詳細なログを記録する #以下、カスタム変数 ME=username@example.jp BLACKLIST=/home/vpopmail/domains/.blacklist #ブラックリストファイル NGWORD=/home/vpopmail/domains/.ngword #NGワードファイル