I need to modify the "From:" header line in incoming e-mail messages only if "Message-Id:" starts with a defined string. So in main.cf I put:

header_checks = pcre:/etc/postfix/header_checks

and header_checks file contains:

if /^Message-Id: <footext.+/
/^From: (.*)@johndoe.com/ REPLACE From: ${1}@ext.johndoe.com

It doesn't work, the condition does not take. What am I missing?


2 Answers 2



if /pattern/flags

   endif  Match the input string against the patterns between
          if  and endif, if and only if ----> the same <----- input string
          also matches /pattern/. 

you can not use an if/endif block to match a different header.

  • So it seems header_checks is no good to my needs, isn't it? Can you suggest a way to have a conditional replace among header fields (matching a different header line)? Thanks in advance for any help you will offer.
    – Gabriele
    Apr 14, 2013 at 7:11
  • I'm not sure there is a simple way to do this with postfix internal features. For this kind of stuff, I usually attach a content filter like FuGlu (disclaimer: written by me)
    – Gryphius
    Apr 15, 2013 at 7:43
  • Couldn't find the quote in the link anymore. So it seems this syntax would work in the newer versions of postfix?!?
    – t7tran
    Jun 4, 2020 at 6:07
  • No, the restriction is the same like before, things have only been rephrased: [...]then match **that input string** against the patterns between if and endif. Oct 12, 2021 at 15:42
  • There's an additional section in the docs making that clear as well: Many people overlook the main limitations of header and body_checks rules. These rules operate on one logical message header or one body line at a time. A decision made for one line is not carried over to the next line. Oct 12, 2021 at 15:58

I came across this post and thought to update since I had a similar issue: I took a different approach using postfix pipe as suggested in some of these resources:

and just because I ran into the issue of loops:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.