設定 - 郵件過濾設定

出自CS Help
跳轉到: 導覽搜尋

Procmail 是一個郵件遞送代理人,它能根據您設定的過濾規則,在信件被寫入您的信箱前先做處理

像是利用它來做信件的分類、信件編碼轉換或抵擋具有相同特徵的信件 (請見 廣告信簡介)

官方網站 http://www.procmail.org/

設定方法

這份文件只提供快速的說明,欲知更詳細的內容請參照 procmail(1), procmailrc(5), procmailex(5) 的manual page

Step1: 編輯 ~/.forward

首先,登入工作站並修改家目錄下的 .forward 為

       "|/usr/local/bin/procmail"

Step1: 建立 ~/.procmailrc

編輯家目錄下的 .procmailrc,可以先將下面的範例貼上,並按註解說明修改第三行。

       PATH=/bin:/usr/bin:/usr/local/bin
       MAILDIR=$HOME/Mail
       DEFAULT=/var/mail/your_id # 請將 your_id 換成您的工作站帳號
       LOGFILE=$MAILDIR/from
       
       :0:
       * ^From.*berg
       from_me
       
       :0
       * ^Subject:.*Flame
       /dev/null

Step3: 修改 ~/.procmailrc 內的規則

從第六行開始是過濾規則,格式為

       :0 [flags]
       * <條件>
       <action line>

每一筆規則由 :0 開始,中間有任意條 * 開始的條件式,最後一行則是欲執行的動作。

如範例中的第一筆規則是:

       :0:
       * ^From.*berg
       from_me

規則中的第二行是 正規表示法,代表條件為 "在郵件(含標頭)中,如果有某一行開頭是 From ,而且後面 接著若干字元後又接著 berg 時"。

第三行則是規則的動作,也就是把這封信存到檔案 $MAILDIR/from_me 中, 其中 $MAILDIR 環境變數已經在檔案的一開始設定好了。

第二個規則也是大同小異,只是第二個規則的最後一行表示要把符合條件的郵件捨棄。

如果有一封郵件都沒有符合所有的條件, 則會被存到 DEFAULT 環境變數指定的檔案

flags

常用的 flags 有:

flag 動作
c 將郵件複製一份
B 只檢查郵件的本體有無符合條件式
H 只檢查郵件的標頭有無符合條件式 (預設)

其他 flags 請參照 man procmailrc

條件式

條件式用 Extended regular expression 表示, 如果郵件符合規則中的 所有條件式, 就會執行規則的 action line。如果沒有寫條件式, 則每一封郵件都會交給 action line 處理.

除此之外, 條件式還有一些特殊符號可以使用:

       !               not
       
       < num           郵件容量小於 num 個 byte
       
       > num           郵件容量大於 num 個 byte

有關條件式的其他用法, 請參照 man procmailrc

基本 regular expression

字元 功能
^ 一行的開頭
$ 一行的結尾
. 任何字元
a* 零個以上的 `a' 字元
a+ 至少一個以上的 `a' 字元
a? 零個或 1 個 `a' 字元
[a-d] a, b, c, 或 d
[^a-d] 除了 a, b, c, d 以外的字元
de|abc 字串`de' 或 字串`abc'
(abc)* 字串`abc'重覆出現零次以上
\. `.'

例如:

       hello everyone hahaha.          符合    .*lo.*(one)+.*(ha)*\.

`.*'代表任意字元出現零次以上, `+'代表出現一次以上, 所以 "lo everyoneone." 也符合上述的 regular expression.


想更詳細的了解 regular expression, 請參照介紹 regular expression 的書

action line

action line 指明要如何處理郵件,包含下面幾種用法

  • 指定一個檔案 把郵件加到該檔案的最後
  • 指定一個目錄 把郵件存到該目錄底下的某個檔名(檔名各不相同)
  • ! 電子信箱 轉寄給指定的信箱
  • | 程式路徑 使用指定的程式來處理
  • { } 如果一行寫不完可以用大括號括起來

其他範例

環境變數的部份同上一個範例

1. ( `#' 後面接著的是註解 )

       :0
       * From.*@yahoo                  # 針對來源是 yahoo 的郵件做處理
       {
               :0 BH                   # 把從 yahoo 來的廣告信丟掉
               * 賺錢的好機會
               * 廣告
               /dev/null
       
               :0 BH
               * > 20000000            # 有大於 20MB 的信直接丟掉
               /dev/null               # (因為信箱會爆吧@_@)
       
       
               :0 c
               * From.*judy            # 如果是 judy 寄來的信..
               ! mary@yahoo.com        # 就"複製(注意 flag: c)"一份
                                       # 並轉寄給 mary
       }
       # 如果不是從 yahoo 來的信, 就存到 default ( /var/mail/your_id )

2. 郵件備份 ( 使用這個請小心 quota 爆掉 :)

       :0 c
       * Subject:.*重要     # 如果郵件主題有"重要"字眼..
       mail_backup          # 除了會存一份在 /var/mail/your_id 外,還會在
                            # 您的 home 底下的 Mail/mail_backup 另存一份.

Note: 想看更多的例子, 請 man procmailex

Reference