We use Microsoft Exchange 2007 at InfoBasis for email, and for my sins I have to manage it. It seems a little enterprisey unwieldy at times for an organisation as small as ours but the Outlook calendaring integration is a must for us and I've mostly worked out how it works and how to keep it running happily (thanks to Brian Reid of C7 Solutions who helped us implement it).

We use the built-in anti-spam filtering - specifically the IP Block Listing, aka "DNS blacklist" (or DNSBL) to block emails from known spam sources. I won't explain how to set it up here as there are plenty of other resources that cover this. Because occasionally we'd get a false positive (eg. from a legitimate AOL or Yahoo account) I was investigating how to write Transport/Edge providers to provide some sort of dynamic spam white list functionality which didn't seem to be provided out of the box. In so doing I discovered that most of the Exchange 2007 code base seems to have been re-written in .NET (which may explain why some feel it was released unfinished/too early). So I pointed Lutz Roeder's .NET Reflector (which reverse-engineers .NET DLLs) at a few of the Exchange Server DLLs in Program Files\Microsoft\Exchange Server\Bin and had a snoop around. Thankfully, I eventually stumbled on the Update-Safelist PowerShell cmdlet which does white listing based on Outlook's Safe Senders - so I didn't have to write any code after all.

Anyway, on my travels I came across ConnectionFilteringAgent.BlockListDnsCallback (in the Microsoft.Exchange.Transport.Agent.ConnectionFiltering namespace) in Microsoft.Exchange.Transport.Agent.Hygiene.dll. This method formats the message that gets returned to the senders mail server should they be listed by a DNSBL. This was of interest because in Exchange 2003 you could use format codes in the error message (e.g. "The IP address %0 was rejected by black list %2") to help legitimate email senders work out why their email was blocked (as documented in KB 823866). But, I couldn't find any documentation on how to use similar format codes in Exchange 2007 - but here in BlockListDnsCallback was this line of code:

message = string.Format((string) provider.RejectionResponse,

Which means you can use the following sort of custom error message in Exchange Management Console > Organization Configuration > Hub Transport > Anti-spam > IP Block List Providers > Edit > Error Messages:

Your IP address {0} has been found on '{1}' (looked up on {2})

Hope that helps!


Comment by Graham

Thanks! I have been looking to try and customise the error and couldn't find the answer anywhere on technet. Now if we get any reported failures the message returned is much more useful.

Comment by Marcel

Brilliant!! It works perfectly. Certainly more helpful than the default message.

Comment by Craig

Brilliant! Thank you!