私は/ 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行を小さなシェルスクリプトにまとめても問題ありませんか?お気に入り:
* ? /usr/local/bin/make-sure-exists-dir $DEFAULT
make-sure-exists-dirを使用して:
/usr/bin/test -d "$1" || mkdir "$1"
また、mkdirのマンページを見ると、-pは存在時にエラーが発生しないため、次のようにすることができます。
* ? mkdir -p $DEFAULT