Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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

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

This answers your exact question:

It applies to a Ubuntu system and worked perfectly for me. Be careful to choose the right "smtp" line in 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

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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