Python Milter / News: Recent posts

Pymilter and Pyspf moved to

CVS is getting too crufty even for geezers like me. It was a toss up between bzr and git, but I'm a gittian now. Note that pydns has moved to

Other pieces will move as time permits.

Posted by Stuart D. Gathman 2016-08-12

pydspam-1.3 alpha released

Bugs are expected due to the substantial API change in libdspam, but this release passes all unit tests, and is running in production on a small MTA that volunteered (nay, begged - since dspam-2.6 crashes on 64-bit systems) to be a guinea pig.

Posted by Stuart D. Gathman 2015-02-16

pydspam is getting an update!

I finally got around to updating pydspam for dspam-3.10. The low level module is done and solid. The high level module is done, but doesn't pass unit testing yet.

I tried to keep the API for the high level Dspam module the same, but the low level dspam extension module necessarily has a very different API - because that is what happened to libdspam.

Check out the trunk of pydspam.

Posted by Stuart D. Gathman 2015-02-14

pymilter-0.9.8 is in EPEL

The EPEL RPM removes the help script. This is probably a good thing, since it just starts a background python process (creating PID files, etc), and has nothing to do with pymilter. But this means that RPMs depending on pymilter. like pysrs and milter, will now have to provide this for themselves - preferably in python.

Posted by Stuart D. Gathman 2014-02-27

python3-branch of pymilter - miltermodule.c compiles

The first step of porting to python3 is done - miltermodule.c compiles in python3. The changes could be handled conditionally. If the python changes aren't too bad, we might not need the python3-branch.

Posted by Stuart D. Gathman 2013-01-13

pymilter-0.9.7 released

Several improved diagnostics for programming errors were added.

Posted by Stuart D. Gathman 2013-01-13

pymilter-0.9.4 released

Handle IP6 in Milter.utils.iniplist(). Compile and test with python2.6.

Posted by Stuart D. Gathman 2011-03-19

pygossip-0.5 released

- Python-2.6
- Handle missing observations of peer
- Allow socket reuse for immediate restart
- Command line client
- Persistent peer reputation

Posted by Stuart D. Gathman 2011-03-19

pydns-2.3.5 released

This improves TCP support to work with remote DNS such as google DNS ( and large results. Tested with python2.4 and python2.6. Added dnslookup() and revlookupall() to DNS.lazy.

Posted by Stuart D. Gathman 2011-03-19


This minor release expands the infractions that cause an IP to be banned. There is an experimental feature to detect and ban "throwaway" domains.

Posted by Stuart D. Gathman 2009-08-29


RPMS for RedHat EL and community rebuilds are available. They include a patch for libmilter to work in a shared library (as required by pymilter) on x86_64.

Posted by Stuart D. Gathman 2009-08-29

pymilter-0.9.3 released

This is a bugfix and documentation release, but also includes milter.getversion() to retrieve the runtime libmilter version. This is used to work around bug in older versions of libmilter.

Posted by Stuart D. Gathman 2009-08-29

pymilter-0.9.2 released

This release adds support for the negotiate, data, and unknown callbacks. The default negotiate callback automagically negotiates protocol steps based on information from function decorators for other callbacks. There is a new Base class in which all the callbacks do nothing (as opposed to the original Milter class in which all the callbacks log the event).

The data callback allows rejecting a message after the RCPT phase, but before the DATA phase begins. This is very handy when using signed MAIL FROM to block forged bounces.

Posted by Stuart D. Gathman 2009-06-08

pymilter/milter split

I have submitted a request to Sourceforge to copy the milter CVS module to pymilter. The pymilter extension module and Milter package will then evolve separately from 'milter', the all singing all dancing python milter. I think this will be better for projects depending on pymilter.

Posted by Stuart D. Gathman 2008-12-05


Ok, so testing for the pydns-2.3.2 release was less than adequate. I believe I've fixed most of the breakage from the port randomization, and added support for querying IPv6 nameservers.

Posted by Stuart D. Gathman 2008-08-01


Pyspf now supports fallback to TCB when TXT or SPF data exceeds the size of a UDP packet. This is disabled in strict mode since publishers really aren't supposed to do that. There is now a configurable timeout for queries, and some tweaks for RFC lawyers.

Posted by Stuart D. Gathman 2008-07-29


Added TID and port randomization. Although pydns is unlikely to be used as part of a caching DNS server, I wanted to pile on to OS/X Server (which still isn't fixed). Also, the previous behaviour of always setting TID to 0 caused problems with some firewalls.

Posted by Stuart D. Gathman 2008-07-29


Pymilter-0.8.9 changes the packaging. The pymilter package will be just the milter module and Milter python package. The and milters are now packaged as milter and milter-spf respectively. I will now split the repository so that milter can be changed a released independently from pymilter. Each will retain its current version, but increment independently after the split.

Posted by Stuart D. Gathman 2007-09-25


A new pyspf was released July 30. It fixes some minor bugs, and allows keyword arguments when generating Received-SPF mail header fields.

Posted by Stuart D. Gathman 2007-08-24


Pyspf-2.0.3 has a debian package in addition to RPMS.

Posted by Stuart D. Gathman 2007-02-06


The pygossip package provides client and server library modules. The server module stores reputations of email identities in a shelve database. The server module is used by the milter in pymilter, and when a senders spam/ham ratio gets too high, their emails are rejected at MAIL FROM. This is much more efficient than scanning and quarantining the message, and keeps clutter out of the quarantine so that false positives are more likely to be noticed.... read more

Posted by Stuart D. Gathman 2007-01-12

New packages released

New packages have been released for pyspf-2.0.2, milter-0.8.7, pygossip-0.2. Also, pyspf and pydns have been accepted by the Fedora project as python-pyspf and python-pydns. The python-* packages are always compiled for the system version of python (Centos-4 and python2.3 for the binaries on sourceforge). The other packages are compiled for Centos-4 and python2.4. You can have both python-pyspf and pyspf installed at once.

Posted by Stuart D. Gathman 2007-01-12


This pyspf release passes the first official test-suite release from It also has full support for IPv6.

Posted by Stuart D. Gathman 2006-12-14


A version of pyspf that follows the official RFC 44089 has always been included with milter. Now there is a standalone pyspf file release for those that just want the SPF library. It conflicts with the milter package for now (install one or the other). Future versions of milter will depend on the pyspf package instead.

Posted by Stuart D. Gathman 2006-07-31

GOSSiP support and pygossip

An alpha release of pygossip has been commited to CVS, module pygossip. A version of the milter has been commited to CVS which supports calling GOSSiP to track domain reputation in a local database.

Posted by Stuart D. Gathman 2005-11-07

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

JavaScript is required for this form.

No, thanks