ゴミメールは特定の文字列を含んでいることがあります。 qmail では、~/.qmail に設定を書き込むことで、 特定の文字列を含むメールを選別することができます。
ある文字列を含むメールをゴミメールとして、 ゴミメール専用ディレクトリに移すためのスクリプトは以下の通りです。 ただし、以下の設定を使っています。 適宜、環境に応じて変更してください。Csh スクリプト
- 新着メール保管ディレクトリは ${HOME}/Maildir/new
- ゴミメール保管ディレクトリは ${HOME}/Maildir/junk (mkdir してください)
- mailcheck-1.0 (新着メールのみチェックする)
- mailcheck-0.0 (メール新着の度に new ディレクトリすべてをチェックする)
ゴミ文字列の指定
ゴミメールが含む文字列として指定したい文字列は、 set pattern の所に追加すればOKです。 たとえば、「hogehoge」という文字列を含むメールも選別して junk 行きにしたい場合は、次のようにします。
set pattern = (\ 'gomigomi'\ 'hogehoge'\ )ゴミメールには、HTML 形式のメールが大量にあります。 HTML 形式のメールをゴミメールとして検知するには、 次のパターンを指定すればOKです。
set pattern = (\ 'text/html'\ )このスクリプトでは、grep で文字列検索するときに、 オプション -i をつけて大文字/小文字を区別していません。 区別したい場合は -i を外してください。
例外文字列の指定
上の方法でパターンマッチングしたけれども、 例外として救い出したいメールがある場合があります。 例えば、HTML メールをゴミとして判断することにしたけれども、 知人からのメールがいつも HTML メールであるような場合です。デフォルトの例では、文字列パターン "reigai" を検知した場合には、 メールを救い出しています。 他にも救いたい文字列がある場合は、patternexcept に追加すればOKです。
set patternexcept = (\ 'reigai'\ 'reigai2'\ )実行権を与える
このスクリプトを適当な名前(例えば ${HOME}/bin/mailcheck)で保管し、 実行権を与えておきます。x.y は適当に合わせてください。
chmod +x ~/bin/mailcheck-x.y
トラブルシューティング
上のシェルスクリプトは、grep の正規表現を使っています。 不正な正規表現が使われると、同じメールを何通も受け取ることがあります。 特殊文字を含む文字列をパターンマッチさせたい場合は、 正しい正規表現になっているかどうか、よく確認して下さい。設定ミス例:
- ' を含む文字列をエスケープなしで指定したため、' の数が合わない
'You're rich' など- 行の最後に、「次の行に続く」を意味する \ がない
${HOME}/.qmail を以下のように変更すれば、 メールが新着するたびに選別を行います。x.y は適当に合わせてください。
./Maildir/
| ${HOME}/bin/mailcheck-x.y