以前使用 procmail + spamassassin 過濾垃圾信,只會搭配 mbox 信箱使用,後來為了設定用戶信箱的 qutoa ,將信箱格式改為 Maildir/ 目錄信箱格式,就不再使用 procmail ,而改用 amavisd-new 了。
現在放棄 amavisd-new ,回頭改用 procmail ,搭配 Maildir/ 的問題得想辦法解決。終於給我搞定了,紀錄如下:
http://www.redhat.com/archives/rhl-list/2005-January/msg00974.html
依照討論裡的方法並稍加修改,將 /etc/procmailrc 設定如下:
LOGFILE=/var/log/procmail.log
DROPPRIVS=yes
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir
:0fw
| /usr/local/bin/spamc
然後建立 procmail.log 檔:
touch /var/log/procmail.log
接著設定 postfix 將郵件遞送給 procmai :
postconf -e mailbox_command=/usr/bin/procmail
/etc/rc.d/init.d/postfix reload
果然成功了!可以從 procmail.log 裡看到信件被 spamassassin 過濾加標籤,並正確遞送到收件者的 Maildir 目錄下。
可惜,好景不常,如果不用管使用者 quota 的話,世界應該是美好的。 spamc / spamd 一陣子後就無緣無故失效了,信件被 procmail 遞送到 /var/mail/userxxx 信箱去了。
/var/log/mail/info.log 裡的相關紀錄之一:
procmail: Quota exceeded while writing "/home/userblahblah/Maildir/tmp/1192780146.5838_0.mail"
於是,修改後的 /etc/procmailrc 第二版如下:
LOGFILE=/var/log/procmail.log
DROPPRIVS=yes
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir
:0fw
| /usr/local/bin/spamc
# 如果發生錯誤則離開,以免搞亂之後的 spamc /spamd 執行環境。
:O E
{
EITCODE=127
}
這樣做可以解決部份問題,但是超過 quota 的用戶,信件並沒有被退回,還是送到 mbox 信箱去。
我想,這是因為 mailbox_command 是 postfix 用來取代遞送信件到信箱的動作,所以由 procmail 接手後, postfix 便認為信件遞送動作完成,不會處理無法寄達信箱的退信了。
好,這個方法要組合 postfix ( Maildir/ ) + procmail + spamassassin 來過濾垃圾信應該是不可行了,要另尋他法。不過,至少玩出了 procmail + Maildir 的用法,也算是有收獲。
沒有留言:
張貼留言