I've got a Postfix setup that allows relays only from certain domains. I accomplish this using the relay_domains flag in main.cf and it queries mysql to find the list of allowed domains.

relay_domains = mysql:/etc/postfix/mysql_domains.cf

I would like to add a header_checks instruction to insert a custom header based on the result of the mysql check for relay_domains which would show which domain was relayed through Postfix. The reason for this is that if the allowed domain is .domain.com and the recipient email address is someone@subdomain.domain.com, I'd like to know which .domain.com Postfix resolved to in the lookup.

I've got the header_checks working:

/^From:/i PREPEND X-Relay-Domain: xxx

But I'm not sure how to capture the result of the domain query and use that for the header_checks PREPEND. I could also perform another mysql lookup on header_checks but I'd like to avoid that if possible.

  • Consider this case: an email intended to two or more different domains. For this case, there is possibility that postfix will append two or more header lines. Is there a problem with that? – masegaloeh May 23 '15 at 5:39
  • @masegaloeh in that case it would be ok because of the way I process mail afterward but that's a very good point you raise. – JP Toto May 24 '15 at 14:36

Perhaps, you can use check_recipient_access from postfix.

smtpd_recipient_restriction = ... 
                      check_recipient_access pcre:/etc/postfix/addheader

File /etc/postfix/addheader has content like this

/.+@(.+)/  PREPEND X-Relay-Domain: $1

In access table, PREPEND action will add header in your email. In this case, this map will add domain parts of your recipient.

| improve this answer | |
  • That may work, I'll work with our ops team to see if we can use it. Thanks! – JP Toto Jun 6 '15 at 15:25

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.