*[MTA]: Mail Transfer Agent
Mailman is a powerful mailing list manager. It has a decent web interface for users and admins and offers content filtering, archiving, and much more. This documentation is based on
Mailman v.2.1.14, Ubuntu 11.04, and
Exim v.4.7.4 as MTA.
Package installation
To install the necessary packages this line is used:
aptitude install mailman exim4-daemon-heavy
Initial config
Unfortunately, the next steps are not part of the process of package installation but have to be done manually. First, a site password has to be set:
mmsitepass
Now, the initial list has to be created:
newlist mailman
Exim setup
To give Exim awareness of an existing Mailman setup, two ways are possible. The first one is based on the /etc/aliases
file where new lists need to be added by hand. The second way is more comfortable, yet needs some customisation on the Exim part.
Alias file based
The previous step of creating the initial Mailman list results in the following output:
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:
## mailman mailing list
mailman: "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join: "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request: "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman"
So, the lines after "## mailman mailing list
" are to be copied and pasted at the end of the file /etc/aliases
. This has to be done each time a new list is created. The changes are activated by the following line:
newaliases
Exim config file based
The second way of configuration makes Mailman speak to Exim directly. Therefore, a couple of changes are to be made to different sections of the Exim config file at /etc/exim4/exim4.config.template
.
In the section "MAIN CONFIGURATION SETTINGS
" these lines are to be added:
# ---------- MAILMAN --------------------------------------------------------
# Home dir for your Mailman installation -- aka Mailman's prefix
# directory.
MAILMAN_HOME=/var/lib/mailman
MAILMAN_WRAP=MAILMAN_HOME/mail/mailman
# User and group for Mailman, should match your --with-mail-gid
# switch to Mailman's configure script.
MAILMAN_USER=list
MAILMAN_GROUP=daemon
# ---------- /MAILMAN -------------------------------------------------------
In "ROUTERS CONFIGURATION
" just below "begin routers
" these line are new:
# ---------- MAILMAN --------------------------------------------------------
# Messages get sent out with envelope from "mailman-bounces@virtual_domain"
# But mailman doesn't put such addresses in the aliases. Recognise these here.
mailman_workaround:
domains = +local_domains
require_files = MAILMAN_HOME/lists/$local_part/config.pck
driver = accept
local_parts = mailman
local_part_suffix_optional
local_part_suffix = -bounces : -bounces+* : \
-confirm+* : -join : -leave : \
-subscribe : -unsubscribe : \
-owner : -request : -admin
transport = mailman_transport
group = MAILMAN_GROUP
# Mailman lists
mailman_router:
domains = +local_domains
require_files = MAILMAN_HOME/lists/$local_part/config.pck
driver = accept
local_part_suffix_optional
local_part_suffix = -bounces : -bounces+* : \
-confirm+* : -join : -leave : \
-subscribe : -unsubscribe : \
-owner : -request : -admin
transport = mailman_transport
group = MAILMAN_GROUP
# ---------- /MAILMAN -------------------------------------------------------
In section "TRANSPORTS CONFIGURATION
" just after "begin transports
" the next line need to be added:
# ---------- MAILMAN --------------------------------------------------------
mailman_transport:
driver = pipe
command = MAILMAN_WRAP \
'${if def:local_part_suffix \
{${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} \
{post}}' \
$local_part
current_directory = MAILMAN_HOME
home_directory = MAILMAN_HOME
user = MAILMAN_USER
group = MAILMAN_GROUP
freeze_exec_fail = true
# ---------- /MAILMAN -------------------------------------------------------
The new config is processed and set up by this line:
update-exim4.conf && service exim4 restart
Apache config
Mailman comes with a nice web UI and even a fitting config file for Apache. In /etc/apache2/sites-available/default
the next two line are to be inserted right before the end of the file:
Include /etc/mailman/apache.conf
RedirectMatch ^/mailman(\/*)$ http://hostname.yourdomain.tld/cgi-bin/mailman/listinfo
The first line lets Apache parse the Mailman configuration file. The second line redirects all requests for http://hostname.yourdomain.tld/mailman to the listinfo page of Mailman at http://hostname.yourdomain.tld/cgi-bin/mailman/listinfo.
The changes are activated like this:
service apache2 restart
Workaround for list archives-bug in Ubuntu
In recent releases of the Mailman package for Ubuntu, the privileges on the directories of list-archives are not set properly so that new posts are not archived at all. To fix this the following line will help:
chown -R list /var/lib/mailman/archives/private/
In case there are already posts which are not indexed, the archive can be reinitialized like this:
/var/lib/mailman/bin/unshunt