I am trying to configure Postfix to NOT accept outbound messages with FROM addresses other than my own domains.

The following regex successfully rejects only 3 domains:

/(^From:.*domain\.com|^From:.*domain\.net|^From:.*domain\.co\.il)/ REJECT SEND FROM THE RIGHT DOMAINS FFS!

I'd like to basically reverse it and block EVERYTHING BUT those 3.

So according to the manual:

!/pattern/flags result When pattern does not match the input string, use the corre- sponding result value.

However, this just blocks everything:

!/(^From:.*domain\.com|^From:.*domain\.net|^From:.*domain\.co\.il)/ REJECT SEND FROM THE RIGHT DOMAINS FFS!
  • 1
    Meh, even after creating such a beautifully crafted regex that finds everything but them domains it wont accept it: ^(?!(From:.*domain.net|From:.*domain.com|From:.*domain.co.il)).*
    – JustAGuy
    Commented Jun 2, 2016 at 9:58

1 Answer 1


The problem is postfix use header_checks for every header line. So if there is header line like

Subject: I love you :p

and postfix will apply that regex into this line. The result is postfix will reject this email.

The solution is adding if endif in your regex pattern

if /^From:/
!/(^From:.*domain\.com|^From:.*domain\.net|^From:.*domain\.co\.il)/ REJECT SEND FROM THE RIGHT DOMAINS FFS!

Basically you tell postfix to apply the pattern into From header only. This will prevent postfix to evaluate the regex into another header line and causes rejected email.

See postfix manual to further information

  • You sir deserve a medal!
    – JustAGuy
    Commented Jun 3, 2016 at 5:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .