OSWikiHK: 請協力 GPLv3 的中文翻譯工作。
Delivery email via Procmail
OSWikiHK,自由中文開源知識庫
目录 |
如何設定電郵系統使用 Procmail 分派電郵
譯文緣起
其實自己很少在翻譯的工作,主要原因就是因為自己寫不會來得比譯文慢,另一原因是英文技術名詞中有很多也沒有完整地翻譯好,所以要翻譯起來就顯得特別幸苦,而且很多時候也落於不容易理解。
但是自已近來卻無法好好地做 lab ,而沒有做過 lab 的文件;我又不希望把它編寫出來;所以為了望梅止渴,所以特別選了這份英文文件來譯。
英文名詞的理解
- system-wide
- 這應可以譯作整個電郵系統。其實要了解這個字詞的意義也不難!因為有很多的程式是可以讓使用者作本身的設定的。但是如果你並不是讓不同的使用者來設定 procmail ,而是希望你系統的 procmail 可以給系統管理者作統一的設定,你就可能需要考慮我們稱為 system-wide 的設定了。
- local delivery
- 這是另一個在電郵上重要的名詞。它是說當電郵系統把電郵信件發放到本地使用者的信箱內,或者交給內部的發放 MDA 的過程;這完全是有別於我們把電子郵件寄到互聯網上的過程。(另一方面我們稱為 remote delivery )話說回來,在 exim 這一個電郵伺服器,它在版本 3 的時候作了一個完全不同的處理,但是到 exim4 已把這個分別完全刪除,只把它叫作 route 。老實說我喜歡 exim4 的分別,不要把它分開出來自找麻煩。但是 postfix 卻把這方面分得十分開,這是直接影響到不同的系統設定的。
英文意譯
root 的 alias_maps
首先要留意的是︰如果你要設定使用 procmail 來發放電郵的話,請你設定了 root 所屬的 alias_maps 的。(請參考之前的網上文件)這是有一很重要的問題!因為 procmail 是可以用來起動一些外部程式的。如果你的 root 帳號沒有作 alias_maps 到其它的使用者帳號的話,那麼當它發送 root 帳號下的信件,而又需要執行外部程式的時候,那麼你的電郵伺服器就會得到 root 的使用者權力,那麼很有可能就會產生保安問題了。(其實這問題除了在 procmail 上出現外,也很有可能在其它的 MDA 下出現,所以建立 root 的 alias_maps 是一十分重要的事情。)
main.cf 下的設定參數
- main.cf 的設定::
/etc/postfix/main.cf:
mailbox_command = /path/to/procmail
/etc/postfix/main.cf:
mailbox_command = /path/to/procmail -a $EXTENSION
參數的解釋:: 其實這裡只有一個參數有關的,這就是 mailbox_command 。這是說當電郵器在發送郵件到 mail storage 的過程,不直接到交到硬碟的儲存空間;而是把這些信轉交至 MDA ,亦即是 procmail 。如果你的 procmail 是安裝到 /usr/bin/procmail 的話,那麼你的設定檔就會如下︰
mailbox_command = /usr/bin/procmail
mailbox_command 與環境參數
其實當你執行一些 mailbox_command 的時候,你也可以把一些環境參數加到 mailbox_command 下的。(要數環境參數之多,可以數一數 exim 的環境參數。)其實每一次有一封信要發放,在電郵系統下也會產生一大堆的環境參數,例如︰
- DOMAIN
- 如果你要發送的電郵地址是︰ frankie@samba.hk 的話,那麼你的 DOMAIN 就是 samba.hk 了。
- LOCAL
- 回到我們剛才所講的電郵地址,它的 LOCAL 就是 frankie 了。(這個環境變數, exim 稱作 local_part 的。
- HOME
- 這是說要發電郵地址的使用者,他的家目錄。如果你的電郵系統是使用 Maildir 的話,這很可能就是你 Maildir 所在的家目錄了。如果 frankie 在系統內的家用錄為 file:///home/frankie ,那麼 HOME 就會代示作 /home/frankie 了。
- LOGNAME
- 這時,它的 LOGNAME 為 frankie
- USER
- 這裡的 USER 和 LOGNAME 是相同意義的。
- RECIPIENT
- 這裡就是指 frankie@samba.hk ,完整的電郵地址。
- EXTENSION
- 這是一個有些古怪的電郵表示方式,因為很多時候,電郵伺服器也會容讓伺服器把使用者的電電作一延伸的,這方面我們稱為 EXTENSION 。例如︰在電郵伺服器下,你的電郵地址是 frankie@samba.hk 的話,你可以加上不同的 EXTENSION 來表達你的電郵地址,例如︰ frankie+wife@samba.hk 。這樣也會寄到你的電郵信箱下!為什麼要有 EXTENSION 的存在?其實使用 EXTENSION 加上一些 email filter 來做事情,這樣可以十分順利地把電郵分開到不同的 Mail Folder 下,而且絕對不會有任何的錯誤出現;只是我很少聽人說會使用的這功能在設定 email address 吧!(而 exim 中的 EXTENSION 中除了可以使用 suffix 還可以使用 profix ,而 Postfix 就只可以有 profix 的格式了。)
在 postfix 中的 mailbox_command 中加上不同的環境參數
你可以參考以下的設定,就可以在使用 mailbox_command 中加上不同的環境參數。
/etc/postfix/main.cf:
mailbox_command = /path/to/procmail -a $EXTENSION
Using Procmail for system-wide local delivery
- Warning
- if you use procmail in this manner, you must set up an alias for root that forwards mail for root to a real user. See the FAQ entry titled "Mail for root is delivered to nobody".
- Specify that all mailbox delivery is to be done by procmail. For example:
/etc/postfix/main.cf:
mailbox_command = /path/to/procmail
/etc/postfix/main.cf:
mailbox_command = /path/to/procmail -a $EXTENSION
If you can, avoid using any shell meta characters or built-ins such as $ or " or IFS or &&, because they force Postfix to run an expensive shell process. However, procmail is a pig, and the gain of avoiding a shell can be unnoticeable.
- Execute the command postfix reload to make the changes effective.
Postfix exports information via environment variables. The contents are censored. Characters that may have special meaning to the shell, including whitespace, are replaced by underscores.
- DOMAIN
- The text to the right-hand side of the @ in the recipient address.
- EXTENSION
- Optional address extension part.
- HOME
- The recipient's home directory.
- LOCAL
- The text to the left-hand side of the @ in the recipient address, for example, $USER+$EXTENSION.
- LOGNAME
- The recipient username.
- RECIPIENT
- The entire recipient address, $LOCAL@$DOMAIN.
- SENDER
- The complete sender address.
- SHELL
- The recipient's login shell.
- USER
- The recipient username.
資料來源:: http://www.postfix.org/faq.html#procmail
鳴謝︰ SWPEARL 的支援 http://www.swpearl.com

