Jim Niemira (urmane@urmane.org) wrote the original C module and some quick
and dirty python to use it.  Stuart D. Gathman (stuart@gathman.org) took that
kludge and added threading and context objects to it, wrote a proper OO
wrapper (Milter.py) that handles attachments, did lots of testing, packaged
it with distutils, and generally transformed it from a quick hack to a
real, usable Python extension.

Other contributors (in random order):

Daniel Troeder
  for pointing out a typo in @noreply
arkanes@irc.freenode.net
  for suggesting a class method to compute and cache protocol masks
habnabit@habnabit.org
  for suggesting function attributes and decorators for protocol negotiation
Dwayne Litzenberger, B.A.Sc.
  for library_dirs patch to compile on Debian 
Dave MacQuigg 
  for noticing that smfi_insheader wasn't supported, and creating
  a template to help first time pymilter users create their own milter.
Terence Way
  for providing a Python port of SPF
Scott Kitterman
  for doing lots of testing and debugging of SPF against draft standard,
  and for putting up a web page that validates SPF records using spf.py
Alexander Kourakos
  for plugging several memory leaks
George Graf at Vienna University of Economics and Business Administration
  for handling None passed to setreply and chgheader.
Deron Meranda
  for IPv6 patches
Jason Erikson
  for handling NULL hostaddr in connect callback.
John Draper
  for porting Python milter to OpenBSD, and starting to work on tutorials
  then pointing out that it would be easier to just write the MTA in Python.
Eric S. Johansson
  for helpful design discussions while working on camram
Alex Savguira
  for finding bugs with international headers and
  suggesting the scan_zip option.
Business Management Systems - http://www.bmsi.com
  for hosting the website, and providing paying clients who need milter service
  so I can work on it as part of my day job.

If I have left anybody out, send me a reminder: stuart@gathman.org
