我在/ 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来解决这个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
感谢您的帮助。