Estou usando header_checks no Postfix para reescrever meus cabeçalhos (para e-mails enviados pelo Outlook através do meu servidor).
Aqui está a parte do cabeçalho que estou tentando alterar:
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)
O que eu quero fazer: substituir somente a PRIMEIRA LINHA (com algumas informações personalizadas) e anexar as duas últimas linhas.
O que tentei (em header_checks):
/^\s*(Received: from).*$(.*)/ REPLACE $1 my personalized text $2
Funciona apenas quando eu removo $ 2 (por isso, substitui o total recebido: de pelo meu texto), se eu colocar $ 2, ele simplesmente não substitui o meu cabeçalho.
Acho que esta parte está correta:
/^\s*(Received: from).*$
Seleciona a primeira linha ou "Recebido: de". Mas como posso dizer que o que segue na minha expressão regular deve ser considerado como um parâmetro de $ 2?
Pesquisei em todos os lugares e não consegui encontrar (consulte a sintaxe POSIX, sintaxe PERL (como este documento diz que "A substituição de substrings da expressão correspondente na string de ação é possível usando a sintaxe convencional do Perl"))
Encontrei um exemplo de trabalho com os parâmetros $ 1 e $ 2:
/^\s*(Received: from)[^\n]*(.*)/ REPLACE $1 [127.0.0.1] (localhost [127.0.0.1])$2
Mas eu não entendo onde é decidido o que é $ 1 e o que é $ 2
PS: Eu postei essa pergunta no ServerFault, mas agora imagino se ela não deveria estar no StackOverflow?
EDITAR: Novas coisas que eu tentei e os resultados:
/^\s*(Received: from).*\((.*)/ REPLACE $1 mytext ([xxx.xxx.xxx.xxx])$2
Isso me dá:
Received: from mytext ([xxx.xxx.xxx.xxx])CEST)
Eu realmente não entendo porque não está detectando o parêntese de abertura mais cedo (parece que ele detecta somente após o ";")
EDIT2: testes adicionais
Então, tentei remover a linha para verificar se meu cabeçalho ainda estava da mesma forma de antes. É, aqui está o resultado:
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)
Então, considerando o fato de que há muito "0" nesse cabeçalho, tentei colocar a seguinte linha em meu header_checks para ver onde ele é cortado:
/^\s*(Received: from).*(0.*)/ REPLACE $1 mytext ([xxx.xxx.xxx.xxx])$2
E obtenho o seguinte resultado:
Received: from mytext ([xxx.xxx.xxx.xxx])0 (CEST)
Isso é incrivelmente estranho e eu não tenho idéia de por que ele corta neste zero e não em nenhum dos zeros antes (em 2014, em endereços IP, mesmo em +0200 porque o último ?, etc)