web-dev-qa-db-ja.com

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。メールは引き続き配信されますが、送信ユーザーにもエラーコードが返されます。

EXITCODEHostの行をコメントアウトすることで一時的にこれを修正しましたが、より良い解決策があるかどうか知りたいです。

このコードブロックはネット上の複数の場所で見つかりましたが、なぜこのエラーが再発するのかを実際に見つけることができませんでした。ローカルユーザーにメールを送信すると発生するようです。ユーザーが他のユーザーに送信するための.forwardファイルを持っている場合もあれば、持っていない場合もありますが、結果は同じです。転送を台無しにした場合に備えて、DROPPRIVSも削除してみましたが、影響はなかったようです。

  • * ? /usr/bin/testで始まる行に問題がありますか?
  • *は正規表現を意味しますが、?は整数値を返しますよね?
  • 照合される整数は何ですか?それとも、整数の戻り値を比較するだけですか?
  • 2つのブロックの間にスペースが必要ですか?

助けてくれてありがとう。

2
bradlis7

実際に 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

助けてくれてありがとう。

0
bradlis7

ある種の競合状態に賭けます。/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
1
pjz