◇ [doc] using procmail as mail filter
--------------------------------------------------------------------------------發信人: [email protected] (Chia-liang Kao), 看板: BSD
標 題: [doc] using procmail as mail filter
發信站: Neto Corp. Taichung, Taiwan (Sat Jan 31 14:25:18 1998)
轉信站: Maxwell!bbs.ee.ntu!freebsd.ntu!news.cs.nthu!news.nthu!newsfeed.nthu!ne
前言
大家常常接了很多 mailing list, 可是又覺得信件太多很難管理,
而最近 Internet 上 spam 更是泛濫, 這篇文章將告訴你
怎麼使用 procmail 做為個簡單, 有效的 mail-filter.
系統需求
安裝 procmail 這個 package (freebsd ports: mail/procmail)
使用
1. 首先, 如果你的系統上, local mail agent 是 procmail 的話,
則可以省下這個步驟. 如果 procmail 不是 default mailer,
你必須用 .forward 這個檔案, 把 incoming mail 送給
procmail 去處理.
在 $HOME/.forward 中, 加入:
"|exec /usr/local/bin/procmail"
請把雙引號一起加進去.
如果你不知道你的系統是否用 procmail 當做 local mail agent,
use: grep -A 2 ^Mlocal /etc/sendmail.cf
2. procmail -v, 看看 default rcfile 是什麼. 預設是
$HOME/.procmailrc, 編輯這個檔案, 加入下列幾行:
VERBOSE=off
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Mail
PMDIR=$HOME/.procmail
LOGFILE=$PMDIR/log
INCLUDERC=$PMDIR/rc.test
INCLUDERC=$PMDIR/rc.maillists
INCLUDERC=$PMDIR/rc.garbage
本文中 .procmailrc define 的 file, 都是可以讓你自己定義的,
為了方便解說, 以下都使用這裡 define 的 file name.
3. 現在我們要來測試一下 procmail 是否正常的運作了呢?
建立 $HOME/.procmail 這個子目錄, 編輯 rc.test 這個檔案,
加入下面的 rule:
:0:
* ^Subject:.*test
IN.testing
procmailrc 的一個 entry 結構如下:
:0 [flags]
<one or more rules>
<which folder to store the matched mail>
第二行的 matching rule 必須用 '*' 當做一行的起始,
後面則是一個 regular expression.
上面那個 :0: 的後一個 ':', 則是表示要使用 locking file,
以防止 mail box corrupt.
procmail 預設是 grep 所有的 header, 你可以用 flags 來設定
要 grep 那些東西. 詳細請參考 procmail 的 man page.
現在寄一封 subject 含有 test 字樣的信件給自己, 看看
使不是正確的被放到了 ~/Mail/IN.testing 裡頭了呢?
4. 現在編輯 .procmail/rc.maillists, 加入:
:0:
* ^TOnew-httpd
LIST.apache-dev
:0:
* ^TOhs-computing
LIST.hs-computing
:0:
* ^TObcbchat
LIST.bcbchat
:0:
* ^[email protected]
LIST.eic
你應該很容易的可以看懂這些在做什麼吧:
把 new-httpd 這個 list 的信件都放到 ~Mail/LIST.apache-dev,
etc...
這邊要在解說一下, 到底 ^TOtext 是做什麼的呢?
事實上, 這個敘述等於 ^{"To: ","Cc: "}.*text,
簡單的說, TO 就是所有會關於 "寄給誰" 的 Header,
包括 To, Cc, 等等的.
5. 現在要把不要的垃圾丟掉囉, 編輯 .procmail/rc.garbage:
:0:
* !^[email protected]
* !^[email protected]
* !^[email protected]
garbage
這個設定檔又是做什麼用的呢? 把不是寄給上面那三個 email 的
信, 而又不是上一個步驟那 mailing lists 的, 丟到 garbage
這個信箱裡頭.
請記得在 .procmailrc 中, garbage 要比 mailing list 後面,
不然 mailing list 的信件就會先丟到垃圾桶了!
然後把 .procmailrc 裡的 rc.test 那行 comment out.
6. 你的 .procmail/log 裡頭, 會紀錄每一封信件的來源(From)
還有它被 procmail 丟到哪個信箱去了, 你可以定期執行
mailstat .procmail/log, 統計每個 folder 各有多少信件,
並且把 log move 到 log.old, 以免 log 長的太大.
7. 以上只是簡單的介紹, 讓你可以很快的用 procmail 做簡單有效的
mail filter, procmail 還有很多很強的功能, 請參考 procmail
的 man page, 以及 mail filtering FAQ:
http://www.ii.com/internet/faqs/launchers/mail/filtering-faq/
--
Chia-liang Kao / [email protected]
Panther Tech Co. , Taichung, Taiwan
http://www.pamud.net/~clkao
`白爛濤濤我不怕' -- IOI 97