Lead Image © Andrey Bayda, 123RF.com

Lead Image © Andrey Bayda, 123RF.com

Mailman 3.0 – a long time coming

The Postman Cometh

Article from ADMIN 29/2015
Mailman 3.0 is a new major version, released 15 years after version 2.0. We put the new version through its paces and explain the installation procedure and new features.

The GNU mailing list manager Mailman incorporates archiving, bounce processing, content filtering, digest delivery, and spam filters, among other features. The project written in Python is a professional software tool, and the fan base appreciates its solid operating principles. Version 1.0 was released in mid-1999 [1], followed by 2.0 in 2000. The latest stable branch 2.1 appeared about 12 years ago, Mailman 3.0 is now an almost completely refurbished major version.

New Design

A lot has happened technologically speaking. According to main developer Barry Warsaw [2], the step to version 3.0 was necessary to iron out problematic design decisions from the previous major releases. Since its inception, the software has not just run on Python, it has contributed in some areas to the development of Python. Warsaw's code, for example, contributed to Unicode handling in Python 3 [3]. The core of Mailman, which handles the message processing, now requires Python 3.

The web interface, which is still rather rudimentary in version 2.x , has been replaced by a modern component, and the developers have also created an attractive solution with many useful features for archiving mailing lists. More specifically, the Mailman 3 suite consists of the following components [4]:

  • Mailman Core: The core component for message processing with a uniform user model, moderation, interfaces for mailing list archiving, and a REST interface for connecting additional components.
  • Postorius: A web interface based on Django for users and list administrators.
  • HyperKitty: An archiving component also based on Django for mailing lists, with extensive possibilities for managing historical messages and thread views, an integrated archive search, day and voting functions, and an integrated response option via web interface.
  • Mailman Bundler: A collection of scripts for setting up the entire suite easily in virtual Python environments.

Both the web interface for administration and the archive component are optional. Mailman Core can also be integrated directly into other applications via the REST interface or provided with its own web interface. A Python interface is available for the archive component.

Besides HyperKitty (Figure 1), links to MHonArc are included for the publicly accessible Mail-Archive.com, as well as a simple prototype plugin for connecting your own systems. The use of multiple archives at the same time is also possible and can be enabled individually by mailing list.

Figure 1: Mailman homepage in the HyperKitty interface.

Relational Database

In previous versions, Mailman used the Python pickle module [5] to serialize and de-serialize Python objects for data storage, which made working with the data they contained more difficult and access from non-Python applications almost impossible.

The major innovation in Mailman 3 and the associated components of the suite is to store data in relational databases such as SQLite 3 (as a simple embedded version), PostgreSQL, and MySQL. However, Mailman Core still has limitations with MySQL.

With Mailman 3, admins can now operate mailing lists under several domains without problem. No domain names were considered when designing version 2, which meant you had to use aliases or each domain had to operate separate Mailman installations. User accounts can now also condense memberships into several mailing lists.

Barry Warsaw emphasized that Mailman no longer sends monthly notifications with passwords in plain text, because version 3 with Mailman Core now only saves password hashes.

Currently, Mailman Core officially supports Postfix and Exim mail servers, with example configurations only for Postfix; Mailman Bundler also expects a Postfix installation. The test installation using Mailman Bundler is also possible without Postfix – or theoretically without a mailer at all. When creating a mailing list, it accesses the postmap tool by default; otherwise, unsightly error messages appear.

Python Mixed

Many server environments still use Python 2, and Python 3 is only available with additionally installed software collections or, as of recently, via the EPEL testing repository [6] with a current RHEL or CentOS 7. Debian 8, for example, has parallel installable packages. For some administrators, this might be the first software package that Python 3 (specifically, Python 3.4) requires. However, only Mailman Core makes this a requirement; Postorius and HyperKitty, on the other hand, currently still need to be run using Python version 2.7 explicitly.

To operate this mixed environment, Mailman Bundler creates virtual environments for each version branch, so required libraries run in parallel, with the flexibility to choose the version. Otherwise, parallel use of the two versions could cause problems, even with distributions that offer all the necessary libraries as normal packages.

Virtualenv implements the virtual environments, which are not virtual machines but merely directory trees containing a few scripts and binaries. Activating such an environment requires environment variables. This translates to practical advantages for installing a development environment and enables an installation on a wide range of distributions. However, packages installed in this way are not installed via the usual package manager and need special attention for updates.

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy ADMIN Magazine

Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

comments powered by Disqus
Subscribe to our ADMIN Newsletters
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs

Support Our Work

ADMIN content is made possible with support from readers like you. Please consider contributing when you've found an article to be beneficial.

Learn More”>


		<div class=