Take the 2-minute tour ×

I've got several production servers running a LAMP stack. They each have a local Postfix server catching any mail from the system and from PHP, and relaying it via a smarthost (the SendGrid SMTP service).

I'd like to add a custom header to every outgoing message sent to the smarthost. This allows me to filter statistics per server in SendGrid. Something like:

X-SMTPAPI: {"category": "www1"}

The Postfix docs mention using the PREPEND action in a Postfix 'access' table. So, I added the following line to /etc/postfix/access:

PREPEND X-SMTPAPI: {"category": "www1"}

and hashed the access file with postmap.

However, I have no idea how to use the map. Something like the following doesn't work:

smtp_client_restrictions = check_client_access hash:/etc/postfix/access

How do I make Postfix prepend this header?

share|improve this question
add comment

2 Answers

This answers your exact question: http://hoursofop.tumblr.com/post/17760274650

It applies to a Ubuntu system and worked perfectly for me. Be careful to choose the right "smtp" line in master.cf. I used a tab to indent the -o line.

Also note that SendGrid strip out the X-SMTPAPI header from the email before it is sent on - so you won't find it there but you will see the category appear within SendGrid dashboard.

share|improve this answer
add comment

You seem to have mis-spelled header_checks as smtp_client_restrictions, which isn't even the correct spelling of the wrong parameter. ☺

This sort of thing is far better done with a simple shim around sendmail, that your PHP (or whatever) scripts are configured to use, you know. The shim script would be a simple exercise in the use of the cat and echo commands. The MTS is really the wrong place to be doing this.

share|improve this answer
Couldn't get it working with header_checks either. Also, that processes every single header so appears to be overkill for such a simple task. Thanks for the suggestion of using a wrapper, but that also seems like a kludge for something an MTA should be able to do with ease. Is there really no 'easy' way? –  Martijn Heemels Jun 17 '11 at 20:38
Yes, there's an easy way, and it's the way of the shim script. Concocting application-layer message content like this is the job of the MUA, not the MTS. This task is fully and squarely within the realm of PHP and the agents that it uses to concoct messages before submission, not in the MTS. –  JdeBP Jun 18 '11 at 10:03
add comment

Your Answer


