У меня есть этот код в / 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
проблема?*
означает регулярное выражение, но ?
заставляет возвращать целочисленное значение, правильно?Спасибо за помощь.
Я бы поставил на какое-то состояние гонки. Имеет ли значение, если вы заключите строку / 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
Собственно dovecot инструкции для procmail это то, что я искал.
# 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
Спасибо за помощь.