Okay, I finally had a chance to look at your example in more detail, and what is happening is the header values are not applied if you pass an actual MailMessage to the outbound adapter. In that case, it assumes you are in control (however, I can see how that could be viewed as a bug).
I noticed that you are only setting the text on that MailMessage anyways. So, can you try to just returning a String from your 'transformError' method? It should then apply the headers when it creates a new MailMessage in the outbound adapter.
By the way, I am not sure where your 'message' variable is actually defined (when you build the String), but it looks suspiciously like a thread-safety issue.