У меня вопрос^^:
Сначала я покажу вам простое правило procmail:
DELIVER="/usr/lib/dovecot/deliver -d $LOGNAME"
DEFAULT="$HOME/Maildir/"
MAILDIR="$HOME/Maildir/"
# deliver spam to spam folder
:0 w
* ^X-Spam-Status: Yes
| $DELIVER -m Spam
# deliver to INBOX and stop
:0 w
| $DELIVER
Теперь мой вопрос, есть ли способ использовать DELIVER как Default, например:
DEFAULT="/usr/lib/dovecot/deliver -d $LOGNAME"
Чтобы вся почта отправлялась на dovecot после проверки правил procmail?
.К сожалению, нет способа указать канал (или пересылку на другой адрес) в качестве места назначения доставки по умолчанию в Procmail. По сути, лучшее, что вы можете сделать, это добавить этот безусловный рецепт к самому вашему .procmailrc
, как вы уже делаете.
:0w
| /usr/lib/dovecot/deliver -d "$LOGNAME"
Кстати, сохранение команды с параметрами в строковой переменной довольно ненадежно, и это трудно или невозможно сделать правильно, когда вам нужно заключить некоторые аргументы в кавычки. Procmail наследует эту проблему и синтаксис оболочки; возможно, см. далее https://mywiki.wooledge.org/BashFAQ/050
Возможный вариант — установить переменную только для указания места назначения в ваших рецептах и доставить только в самый конец. Например, так:
:0
* ^From sender-gossip-l@listserv\.example\.net
{ dest="Gossip" }
:0E
* ^From: majordomo@example\.edu
* ^Subject: \[fnord\]
{ dest="Fnord" }
:0E
... etc
:0w
| /usr/lib/dovecot/deliver -d "$LOGNAME" ${dest+-m "$dest"}
Тщательное использование флага E
для каждого рецепта после первого означает, что первый, чьи условия совпадают, выигрывает, как в обычном файле рецептов Procmail; без него побеждает последний подходящий рецепт, и вы всегда будете обрабатывать все рецепты.