Linux
使用 Maildir 格式的 procmail 腳本出錯
我在 /etc/procmailrc 中有這段程式碼:
DROPPRIVS=yes DEFAULT=$HOME/Maildir/ :0 * ? /usr/bin/test -d $DEFAULT || /bin/mkdir $DEFAULT { } :0 E { # Bail out if directory could not be created EXITCODE=127 HOST=bail.out } MAILDIR=$HOME/Maildir/
但是,當目錄已經存在時,有時它會發送一封帶有此錯誤的返回電子郵件:
554 5.3.0 unknown mailer error 127
. 請注意,電子郵件仍會送達,但它也會將錯誤程式碼發送回發送使用者。我通過註釋掉
EXITCODE
和HOST
線暫時解決了這個問題,但我想知道是否有更好的解決方案。我在網路上的多個地方找到了這段程式碼,但真的找不到為什麼這個錯誤會回到我身邊。當我向本地使用者發送電子郵件時似乎會發生這種情況。有時使用者有一個
.forward
文件要發送給其他使用者,有時沒有,但結果是一樣的。我也試過刪除DROPPRIVS
,以防它搞砸了轉發,但它似乎並沒有影響它。
- 線路開始有
* ? /usr/bin/test
問題嗎?*
表示一個正則表達式,但它?
使它返回一個整數值,對嗎?- 匹配的整數是什麼?還是只是比較整數返回值?
- 我需要兩個塊之間的空間嗎?
謝謝您的幫助。
實際上procmail 的 dovecot 說明是我正在尋找的。
# file: /etc/procmailrc # system-wide settings for procmail SHELL="/bin/bash" SENDMAIL="/usr/sbin/sendmail -oi -t" LOGFILE="/var/log/procmail.log" DROPPRIVS="yes" DELIVER="/usr/lib/dovecot/deliver" # fallback: DEFAULT="$HOME/Maildir/" MAILDIR="$HOME/Maildir/" :0 w * ^X-Spam-Status: Yes | $DELIVER -m spam :0 w | $DELIVER
感謝您的幫助。
我敢打賭某種比賽條件。如果將 /usr/bin/test 行包裝成一個小 shell 腳本,這有關係嗎?喜歡:
* ? /usr/local/bin/make-sure-exists-dir $DEFAULT
使用 make-sure-exists-dir 執行以下操作:
/usr/bin/test -d "$1" || mkdir "$1"
另外,在查看 mkdir 的手冊頁時,-p 不會出錯,所以你可以這樣做:
* ? mkdir -p $DEFAULT