精華區beta FreeBSD 關於我們 聯絡資訊
◇ [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