我使用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
答案 0 :(得分:2)
该配方包含多个语法错误,但跳出消息的出现是因为您在其中一个条件行上没有星号,这使其成为一个操作行。
Procmail配方的一般语法是
:0flags # "prelude", with optional flags
* condition # optional, can have zero conditions
* condition # ...
action
action
可以是邮箱名称,或!
后跟目标邮箱以转发邮件,或|
后跟shell管道。
所以你的第一个食谱是“如果不是来自邮件并匹配从:...,转发到^X-Loop:
。
之后的| formail ...
行只是语法错误而被忽略,因为它需要在前奏行:0
和(可选)某些条件行之后。
此外,^From:
正则表达式显然是错误的。它将与From: .*aaa
或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:
正则表达式。)