Linux

使用 Maildir 格式的 procmail 腳本出錯

  • May 12, 2010

我在 /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. 請注意,電子郵件仍會送達,但它也會將錯誤程式碼發送回發送使用者。

我通過註釋掉EXITCODEHOST線暫時解決了這個問題,但我想知道是否有更好的解決方案。

我在網路上的多個地方找到了這段程式碼,但真的找不到為什麼這個錯誤會回到我身邊。當我向本地使用者發送電子郵件時似乎會發生這種情況。有時使用者有一個.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

引用自:https://serverfault.com/questions/123835