Created: 2008-10-28 01:46
Updated: 2016-05-08 15:46
License: gpl-3.0


This is in HTML at

This is a very simple milter implementation in pure Python, including a sample milter. I'm using this to filter spam under Postfix on, which is Bad and Wrong for several reasons:

  1. I could do the same thing more easily with sender and recipient restrictions.
  2. Postfix's "policy service" interface is about a thousand times saner than the Milter interface, and performs the same job. Writing to the Milter interface does mean that you could, in theory, use this with other MTAs that support milters.

About Milters

Milters are a way to reject or modify mail before it goes into the mail queue. I care about this because it lets me bounce spam to its real sender, not the forged from-address on the mail, so I don't become part of the backscatter problem.

MTAs that support milters include Sendmail, Postfix, and qpsmtpd.

Sendmail includes libmilter, which lets you write milters in C.

I'm using the sample milter to bounce unauthorized mail to some Mailman mailing lists, on a machine with Postfix, so that our server doesn't generate backscatter. I'm probably going to switch away from it shortly because it turns out Postfix has a built-in feature that does more or less the same thing.

About Backscatter

Backscatter is when spam sent from a forged From address gets bounced back to that address, effectively turning the spam's first recipient into an inadvertent spam source. To avoid creating backscatter, don't bounce mail after accepting it; instead, refuse the mail at SMTP-time.

Getting it

git clone


Kragen Javier Sitaker

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more