Postfix header_checks语法(POSIX – Perl)

我在Postfix中使用header_checks来重写我的头文件(对于由Outlook通过我的服务器发送的电子邮件)。

这是我想改变的头部的一部分:

Received: from Raphasus (****.abo.wanadoo.fr [***.***.***.109]) by mail.********.com (Postfix) with ESMTPSA id 917***CE9 for <raph*****@hotmail.fr>; Thu, 31 Jul 2014 09:38:35 +0200 (CEST) 

我想要做的是:只replaceFIRST LINE(带有一些个性化的信息),并追加最后2行。

我试过(在header_checks中):

 /^\s*(Received: from).*$(.*)/ REPLACE $1 my personalized text $2 

它只有当我删除$ 2(所以它代替完整的收到:从我的文字),如果我把$ 2,它只是不会取代我的头。

我认为这部分是正确的:

 /^\s*(Received: from).*$ 

它是select第一行或“Received:from”。 但是我怎样才能知道我的正则expression式后面的内容应该被认为是$ 2参数呢?

我到处search,找不到(查看POSIX语法,PERL语法(因为此文档说“使用传统的Perl语法,可以将匹配expression式中的子stringreplace为动作string”))

我发现了一个有$ 1和$ 2参数的工作示例:

 /^\s*(Received: from)[^\n]*(.*)/ REPLACE $1 [127.0.0.1] (localhost [127.0.0.1])$2 

但是我只是不知道什么是1美元,2美元是什么

PS:我在ServerFault上发布了这个问题,但现在想知道它不应该在StackOverflow上吗?

编辑:我尝试的新事物和结果:

 /^\s*(Received: from).*\((.*)/ REPLACE $1 mytext ([xxx.xxx.xxx.xxx])$2 

它给了我:

 Received: from mytext ([xxx.xxx.xxx.xxx])CEST) 

我真的不明白为什么它不能更早地检测左括号(似乎只能在“”之后才能检测到)

编辑2:进一步testing

所以我试图删除线来检查我的头还是像以前一样的形状。 这是结果:

 Received: from Raphasus (xxxxxxxxxxxxxxxxx.abo.wanadoo.fr [xxx.xxx.xxx.xxx]) by mail.xxxxxxxx.com (Postfix) with ESMTPSA id 5B1xxxxxxF for <[email protected]>; Thu, 31 Jul 2014 14:03:57 +0200 (CEST) 

所以考虑到这个头文件中有很多“0”,我试图在header_checks中放入以下代码来查看它的切入点:

 /^\s*(Received: from).*(0.*)/ REPLACE $1 mytext ([xxx.xxx.xxx.xxx])$2 

我得到以下结果:

 Received: from mytext ([xxx.xxx.xxx.xxx])0 (CEST) 

这是令人难以置信的奇怪,我不知道为什么它削减在这个零,而不是以前的任何零(2014年,IP地址,即使在+0200为什么最后一个?等)

如果您想要删除/replace特定的行或部分行,通常最好尽可能具体。 在你的情况下,你会想尝试更紧密地匹配来自服务器名称和IP后面的文本。

像这样的东西应该做得更好:

([az]{2,25} \(.*\[.*\]\))