Procmail发送一封额外的电子邮件

时间:2013-08-20 00:45:59

标签: forwarding procmail

我使用procmail转发某些' From'到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的环:"

我该如何避免这种情况?

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

无论如何它不起作用。

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

1 个答案:

答案 0 :(得分:2)

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

Procmail配方的一般语法是

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

action可以是邮箱名称,或!后跟目标邮箱以转发邮件,或|后跟shell管道。

所以你的第一个食谱是“如果不是来自邮件并匹配从:...,转发到^X-Loop:

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

此外,^From:正则表达式显然是错误的。它将与From: .*aaabbb匹配(两边都有空格,在任何标题中,而不仅仅是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:正则表达式。)