Procmail:默认发送邮件

Procmail:默认发送邮件

我有一个问题^^:

首先我向你展示一个简单的 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="/usr/lib/dovecot/deliver -d $LOGNAME"

那么在检查了 procmail 规则之后,所有邮件都会发往 dovecot 吗?

答案1

不幸的是,在 Procmail 中无法指定管道(或转发到另一个地址)作为默认投递目的地。基本上,您能做的最好的事情就是将这个无条件配方添加到您的 的最前面.procmailrc,就像您已经做的那样。

:0w
| /usr/lib/dovecot/deliver -d "$LOGNAME"

顺便说一句,将带有参数的命令存储在字符串变量中相当脆弱,当您需要引用某些参数时,很难或不可能正确地执行。 Procmail 从 shell 继承了这个问题和语法;也许可以进一步了解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 配方文件中一样;如果没有它,最后的匹配的食谱获胜,并且您将始终处理所有食谱。

相关内容