Mailman Mailing List Hacks
So you want to run a mailing list? Well, do I have a Mailing List Manager (MLM) for you! It's feature-full, not tied to any particular mail server, and more reliable than your morning alarm clock. It's free and best of all, open source. I'm talking, of course, about Mailman, the GNU MLM.
That's not the opinion of a reviewer who's touched a program for a few days. I've been running mailing lists for over twenty years now, and Mailman has been the class of this kind of software since the first day I started using it. In this article, I'll share with you some of the tips and techniques I've gathered in the 20 years I've spent administering lists using this MLM.
First, let me give you an overview of its general capabilities. Mailman runs on Linux and most Unix systems, including FreeBSD, Mac OS X, and Solaris. While you can run Mailman without a Web server, you lose a lot of its benefits without one. It runs with most, if not all, SMTP (Simple Mail Transfer Protocol) servers. The newest version, 2.1.6b3—released on 11-Feb-2005—requires Python 2.1.3 or later. Older versions run with Python 1.5.2 or 1.6.
However, there is a known security problem with Mailman 2.1 series, up to and including version 2.1.5, when used with versions of Apache 1.x. The problem doesn't seem to exist when used with Apache 2 and up servers. You can either patch your existing setup or update to Mailman 2.1.6 or higher.
On its own, Mailman makes setting up and managing e-mail lists easy. In addition, Mailman is easy to install. But you can take it a little further, to make life (not just installations) easier for both you-as-administrator and for the users who subscribe to the lists you manage. With the use of CGI (Common Gateway Interface) scripts and a Web server—Apache is recommended but not required—Mailman automatically provides a customizable home page for each mailing list and user. With this, users can subscribe and unsubscribe themselves, set up digest mode, set themselves up on vacation, and do all those other housekeeping tasks that eat up the time of MLM managers.
Trust me, even on the smallest lists, anything you can do to put the control of users' accounts in their hands is a Good Thing. It not only saves the manager's time, by putting the power in members' hands, but they'll be a lot happier with their lists.
Mailman also does a good job of handling that most common of mailing list problems: bounced messages,or messages that can't get to the person they were sent to. You can set up Mailman to automatically stop sending messages to bouncing addresses (based on your settings) and simultaneously alert you of a problem.
The program does a better job than most MLMs at this, because you have the option of using variable envelope return paths (VERPs http://cr.yp.to/proto/verp.txt). With VERP implemented, you always know who on the list is bouncing messages. Mailman also uses the typical solution of analyzing bounce patterns based on regular expressions to connect bounce messages with the correct list member.
List administrators can also use the Web interface for account management, moderation, list configuration, and so on. For those who are old hands at the venerable Majordomo, MLM can use similar command-line or e-mail-based commands to run Mailman.
The closest competition to Mailman, when it comes to ease of use, is Lyres' ListManager 8.1. But, at $500, for the least expensive license, Mailman is clearly the better deal for most list managers.
Mailman more than ease of use going for it, though. It also includes built-in archiving, a Network News Transport Protocol (NNTP, a.k.a. Usenet news) server gateway, a spam filter, automatic bounce detection and repair, and both MIME and RFC-1153 digest delivery.
Of course, while Mailman can detect spam, the list administrator is still stuck with a lot of spam in the file systems. Specifically, Mailman saves these messages as Python pickles—Python objects —in the Mailman data directory.
Fortunately, there is a script, discard in Mailman 2.1.5 and higher, that blows away spam messages. To run it, you need to enter the command:
at a shell prompt. You may need to change the directories depending on your Mailman installation.
But, say you don't trust Mailman's spam filters. If you want to further filter your spam messages you can pipe them through the popular open-source spam detector SpamAssassin .
Mailman, however, to the best of my knowledge, doesn't come with such a script. One that I've used successfully is Marius Gedminas , a Python hacker, script . It converts the pickled messages to a standard RFC 822 mail message. You can then use a shell script, like this:
for fn in /var/lib/mailman/data/heldmsg*; do ./mmextract.py $fn | spamassassin -L -e > /dev/null || echo $fn done | xargs /usr/lib/mailman/bin/discard
to pipe the suspect messages to SpamAssassin.
You can also set up Mailman so that messages are scanned for viruses before being sent out to users. To do this, you'll need a copy of the open-source, virus detection program, ClamAV running. Then, to take incoming mailing list messages and pipe them through ClamAV, you'll need the Python program mailman-clamav .
If you want to archive your list messages, Mailman also comes with the built-in ability to create private or public archives. If you want more than a simple archive, though, Mailman also comes with hooks for more advanced archiving programs like MHonArc . With MHonArc, a Perl-based mail-to-HTML converter, you can index mail and read messages with topic thread linking. In my experience, this makes getting useful information from a list's archives much easier.
Another plus is that you can run multiple lists from multiple virtual domains from one instance of the program. I've used Mailman on BSD and Linux boxes; I've found it to have a small RAM footprint, and it doesn't hog the processor.
That said: While you could run Mailman and Sendmail (or another SMTP server) and SpamAssassin and ClamAV And MHonArc on the same machine... I wouldn't. Besides making a single point of failure, the load, especially during spam storms, might be too much for even the most powerful servers.
Still, putting say two or three servers to work with Mailman and related programs is a good investment for anyone who needs to run mailing lists. For very little cost and effort, you can smoothly run multiple lists with thousands of users. And, if you're like most list administrators I know, anything that will cut down on your work load will be welcome.