作者  fcamel (飛啊!起舞的小駱駝)  看板   P_fcamel
 標題  [mail]   fetchmail + qmail + procmail + imapd
 時間  Sat Jun 26 15:54:13 2004


接了系計中TA後, 第一件衝擊就是被root & daemon的大量log淹沒

幾天前問katao學長他怎麼做的,
他說他架個mail server, 大概介紹他處理的機制,
fetchmail + spam + procmail + imapd,
於是我就回寢室埋頭苦試, 順便把半年的SA/NA空窗期補一補 :p

這裡簡單記一下心得( spam部份我還沒研究 )

1. mail流程
UA -> TA(SA) -> Internet -> TA -> DA -> MessageStore -> AA

ex:
UA = pine, outlook express
TA = sendmail, qmail
SA = sendmail, qmail (local mail)
DA = mail.local, procmail
AA = imapd

這個流程的觀念要清楚, 才有辦法設定和偵錯

2. TA = qmail(*1)
我接手的機器sendmail是爛的, 加上我對sendmail完全不熟,
執行失敗不知如何偵錯, 索性用qmail從頭開始

qmail的文件很詳細, make install後放在/var/qmail/doc/,
務必把INSTALL讀熟, 84行而已, 分兩部份, 一般安裝和從sendmail改為qmail,
大部份用FreeBSD的應該照後者作, 預設FreeBSD的sendmail就裝好了

follow INSTALL裡的說明, 並且照著TEST.deliver, TEST.receive去測,
別忘了看log裡的訊息

3. fetchmail
fetchmail在ports下make install即可

它會幫你透過各種protocol去各處抓信, POP3, IMAP, 加上SSL都可以,
設定檔格式挺難懂的, 它的語法類似一般說話方式,
基本的需求只要一小部份就夠了

touch ~/.fetchmailrc; chmod 600 ~/.fetchmailrc
由於user passwd是以明碼存在fetchmailrc裡(*2),
所以執行時fetchmail發現fetchmailrc不是600, 會顯示error

#是註解
---------  fetchmailrc example ----------
poll mail.csie.nctu.edu.tw protocol POP3
  user chlo is fcamel
  password CHLO_PASSWD
  ssl
-----------------------------------------
mail.csie.nctu.edu.tw: mail server
POP3                 : 收信的protocol
user XXX is OOO      : 到mail server收XXX的信, 放在本機的OOO帳號下
password CHLO_PASSWD : XXX的passwd, 注意這裡是明碼
ssl                  : 表示使用SSL收POP3, 去掉這行就是收一般的POP3

設定好rc後, 直接打fetchmail就會抓了

fetchmail可以在rc裡加daemon參數讓它固定時間去抓,
我是用crontab執行fetchmail就是了

抓來的信如同別人寄信給你的情形一樣,
所以TA把信放那, fetchmail就會放在那裡,
以我用qmail的例子來說, 放在 $HOME/Mailbox裡

4. procmail
要在TA收到信後, 交給procmail的話
(1) TA = sendmail: 照著man procmail NOTES裡說的, 加那一行到~/.forward裡:
"|IFS=' '&&p=/usr/local/bin/procmail&&test -f $p&&exec $p -Yf-||exit 75"

(2) TA = qmail   : 若有裝dot-qmail, 同(1)的作法;
                   若沒有, 在~/.qmail加上 | preline procmail

man procmail, man procmailrc, man procmailex可以獲得詳細說明,
網上也有很多中英文簡單說明文件, procmailrc不在此說明

5. imapd
我是裝imap-uw, 似乎還有另一套

http://www.ascc.net/nl/90/1714/04.txt ( 本站mirror )
這裡有詳細易懂的安裝說明

imap-uw的說明文件有點少, 有些設定必須改code, 很麻煩,
參照/usr/ports/mail/imap-uw/work/imap-2002d/docs/

可能用到的設定
make SSLTYPE=unix  : 使imap-uw同時支援plain-text & SSL, 預設只有SSL

另外參考docs下一堆莫明的說明文件, formats.txt, naming.txt, drivers.txt,
imap-uw有兩類mailbox format, Flat-File & File/Message(dual-use mailbox),
前者是一般格式, 只有一個檔案當mailbox, 放所有信,
File/Message是一個目錄當mailbox, 下面每個檔案如同Flat-File的功能

文件裡表示File/Message的效能不好, 2000個信就無法忍受,
不建議使用, 並且它提到支援的各種格式, 看起來都很糟

我想使用dual-use來作信件放類, 花了好多時間, 但不知道怎麼設啊.....
        ───┬──┬───      ───┬──┬───
              │    │      ╭─╮      │    │
              │    │      │  │      │    │
              │    │      │  │      │    │
              │    │      │  │      │    │
                            ╰─╯
( 偷自hokuto版的表情 )

6. simple summary
我目前是fetchmail / qmail / procmail運作OK,
但最後一步imapd收到本機的outlook仍未work


PS

*1
個人疑問: mail server的DN需要有反查嗎?
目前我的猜測是, 若DNS有MX record就不需要, 若沒有就需要反查才能收信,
這部份的觀念很混亂 ˋ(′∼‵")ˊ

*2
個人覺得fetchmail以明碼存實在不是好作法, 但要應付各個不同server,
不用明碼也很難處理, 不過至少以該用雙向編碼存起來吧