FORMAIL

當我們收到e-mail時可以使用本程式幫我們對郵件加以處理
以下是典型的一封信(純文字,由outlook express產生的)
From: "csc" <csc@abc.com.tw>
To: "csc@csc.newlink.to"
Subject: this is a test
Date: Tue, 8 Jul 2003 09:38:46 +0800
MIME-Version: 1.0
Content-Type: text/plain;
    charset="big5"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165

this is content
the end of content

我們可以分成兩個部份檔頭部份及本文部份
檔頭部份:
From: "csc" <csc@abc.com.tw>
To: "csc@csc.newlink.to"
Subject: this is a test
Date: Tue, 8 Jul 2003 09:38:46 +0800
MIME-Version: 1.0
Content-Type: text/plain;
    charset="big5"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165

本文部份:

this is content
the end of content

以檔頭部份說明如下:
  1. 欄位名稱是以:結尾- From:,To:
  2. 欄位是不分大小寫- From:,from:,forM:...均當成同一個
  3. 欄位名稱及其值中間內定有一個空的
  4. formail是不會自動回檔案的它只要在在標準輸出顯示 使用">"轉為檔案(overwrite)
    使用
    ">>" 轉為檔案(append)
    使用
    "|"交由其它程式處理
  5. 指定處理來源檔
檔頭處理
取出欄位值 -x 檔頭欄位 欄位不保留例 -x From: 傳回"csc" <csc@abcd.com.tw>
-X 檔頭欄位 保留檔位名
新增欄位及值 -a 檔頭欄位 類似的欄位不存在時才新增
-A 檔頭欄位 強制新增
-i 檔頭欄位 同上但是原來類似的欄位前面會被加"Old-"
-I 檔頭欄位 原來類似的欄位會被移除
產生唯一的欄位 -u 檔頭欄位 如果有許多相同的欄位保留第一個欄位其它刪除
-U 檔頭欄位 如果有許多相同的欄位保留最後一個欄位其它刪除
更改所有的欄位值 -R 舊欄位 新欄位 使用舊欄位用新欄位取代

其它參數
-v 顯示版本並離開
-z 在field,及content間確保空格只有一個,如果超過一個加以壓縮
-f 不處理非mailbox的格式的資料,直接pass
-r 產生自動回信的檔頭,去掉原始檔頭
原來的Replay-to: xxxx 或
原來的From: xxxxxxx 變為我們的To: xxxxxx
原來的Subject: xxxx 變成 Subject: Re: xxxx
但會保留X-Loop:
-rk 同上但會引用原文每行前加>
-s 分割每一封信再交由其它程式一封一封處理這個參數必須放在最後,
等其它的處理完後才可以使用這個功能
-n [maxprocs] 不要等每一個程式完成,平行處理
-e 郵件開始不需要以空行啟始
-l folder 產生和procmail相同的記錄檔,包含了From:,Subject:,folder,size
-m mimfields
-q 不報告錯誤quiet
-D maxlen idcache 所有的e-mail都有一個Message-ID
它是可以用來辨郵件是否重複,我們可以而儲存在一個檔案及指定這
個暫存檔大小
+skip 當郵件檔被分割時略過skip封
-total 當郵件檔被分割時輸出合併所有的郵件
實例:
取得檔頭資料
formail -X "" #-X取出整行的欄位,""代表取出全部,所以變成取出檔頭資料
取出本文資料
formail -I "" ##加入新的,而原來類似的欄位會被移除,也就是加入一行空白 其它的均移除