A surprising lack: milter clients

March 13, 2010

There's a lot of anti-spam programs and systems, so I'm generally accustomed to being able to find a package to do pretty much any anti-spam job that I want to get done. Which is why I'm all the more surprised that it seems to be impossible to find milter clients or client libraries.

The milter protocol started out as a Sendmail specific interface, but today they've become essentially the generic way to connect MTAs with various anti-spam filters and services. You can get milter server implementations for lots of languages, including Perl, Python, and Ruby, and people happily write milters in all of them; what you can't seem to get is the other side, the MTA client side, something that will let you talk to milter filters.

On the surface, this sounds like a strange thing to want. But as I mentioned, the milter interface has become the generic way to talk to spam-filtering services and there are a number of times when you want to check messages without having to shove them through an MTA; for example, if you have a webmail system it might be nice to be able to run anti-spam checks on a message when a user hits the 'send mail' button and then take specific action within your web application if alarms go off (especially these days).

Also, not all MTAs have built-in milter support but almost every MTA can run external programs during message submission, and writing an external program that just talks to a milter is much simpler (and more maintainable) than hacking milter support into the MTA directly. Well, it would be simpler if there were milter clients or client libraries, especially for scripting languages like Perl, Python, or Ruby.

(As it is, I have a low priority project of someday going through the milter protocol (via pmilter), and probably the Python milter stuff, to write a milter client module in Python. Then I can write something to connect Exim's content scanning to milter filters.)

(PS: I'm aware that there is a 2006 patch to add milter support to Exim. Sadly, it doesn't seem to have gone anywhere since 2006, and I can't even find a way to get the source code any more.)

Written on 13 March 2010.
« End results versus what's inside the black box
Space and content »

Page tools: View Source, Add Comment.
Login: Password:
Atom Syndication: Recent Comments.

Last modified: Sat Mar 13 01:49:44 2010
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.