0

我使用 procmail 将某些“发件人”转发到 Gmail 帐户

/home/user/.procmailrc

:0c
* !^FROM_MAILER
* ^From: .*aaa | bbb | ccc.*
! ^X-Loop: user@gmail\.com
| formail -k -X "From:" -X "Subject:" \
-I "To: user@gmail.com" \
-I "X-Loop: user@gmail.com"
:0
* ^From: .*aaa | bbb | ccc.*
$DEFAULT

这工作正常,但在我的服务器收件箱上,我也收到了“未送达”的邮件

邮件系统 <"^X-Loop:"@my-name-server.com>(扩展自 <"^X-Loop:">):未知用户:"^x-loop:"

我怎样才能避免这种情况?

我试图删除这些邮件。这不是最好的方法。

无论如何它不起作用。

:0B * <"\^X-Loop:"@my-name-server.com> 
/dev/null 
4

1 回答 1

3

该配方包含多个语法错误,但出现退回消息是因为您在其中一个条件行上缺少星号,这使其成为操作行。

Procmail 配方的一般语法是

:0flags       # "prelude", with optional flags
* condition   # optional, can have zero conditions
* condition   # ...
action

action可以是邮箱名称,或者!后跟要将消息转发到的目标邮箱,或者后跟|外壳管道。

因此,您的第一个配方是“如果不是来自邮件程序并匹配来自:...,则转发到^X-Loop:.

之后的| formail ...行只是一个语法错误并被忽略,因为它需要在前奏行:0和(可选)一些条件行之后。

此外,^From:正则表达式显然是错误的。它将匹配From: .*aaaor bbb(两边都有空格,在任何标题中,而不仅仅是From:标题中)或ccc.

最后,其意图显然是将生成的消息实际转发到某处。

:0c
* ! ^FROM_MAILER
*   ^From:(.*\<)?(aaa|bbb|ccc)
* ! ^X-Loop: user@gmail\.com
| formail -I "X-Loop: user@gmail.com" | $SENDMAIL $SENDMAILFLAGS user@gmail.com

如果您只是想转发传入的消息,那么其他-X选项-I当然-k是多余的或错误的。如果他们确实完成了与这个问题无关的事情,也许您需要将其中的一些或全部添加回来(并且还记得使用-X您添加的任何新标题进行提取-I,否则它们将被抑制;这很糟糕)。

您的第二个配方也是多余的,除非您在文件中稍后有更多 Procmail 配方,这些信息应该专门绕过这些配方。(如果是这样,您还需要在From:那里修复正则表达式。)

于 2013-08-21T10:39:25.263 回答