procmail脚本使用Maildir格式时出错

我在/ 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来解决这个EXITCODE ,但是我想知道是否有更好的解决scheme。

我在networking上的多个地方find了这个代码块,但是却找不到为什么这个错误会回到我身上。 这似乎发生在我发送电子邮件给本地用户时。 有时用户有一个.forward文件发送给其他用户,有时不是,但结果是一样的。 我也尝试删除DROPPRIVS ,以防万一它搞乱转发,但似乎没有影响它。

  • 该行是以* ? /usr/bin/test开头的* ? /usr/bin/test * ? /usr/bin/test一个问题?
  • *表示正则expression式,但是? 使它返回一个整数值,是否正确?
  • 什么是整数匹配? 或者它只是比较整数返回值?
  • 我需要两块之间的空间吗?

谢谢您的帮助。

我敢打赌某种竞赛条件。 如果将/ 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 

实际上,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 

感谢您的帮助。