Description

Mailman is a mailing list manager. It's old, but very stable and very decent. The current running version uses Python 2. This is the installation on FreeBSD 12.1.

Installation

On FreeBSD:

pkg install mailman

Configuration

DNS

Watch out using FreeBSD and sendmail! If you want to have a single hostname as a domain for your mailinglist server, you can't have a CNAME in your DNS. So the next is WRONG! I run into some trouble that my virtual domain was detected as a local domain and so the virtual mailinglist tables didn't worked.

lists.example.org. 3600 CNAME smtp.example.org.
lists.example.org. 3600 MX 10 smtp.example.org.

This is right:

lists.example.org. 3600 A 1.2.3.4
lists.example.org. 3600 MX 10 smtp.example.org.

Webserver

Hiawatha

First, set the execution user in the file /usr/local/etc/hiawatha/cgi-wrapper.conf. Add the next line to the file:

Wrap = mailman ; /usr/local/mailman/cgi-bin ; www:www

Then, make cgi exectutable in /usr/local/etc/hiawatha/hiawatha.conf by adding this line:

CGIextension = cgi

In your virtual host configuration, add an executable directory and make it an alias:

Directory {
        DirectoryID = dir_mailman
        Path = /mailman/
        ShowIndex = no
        StartFile = listinfo
        ExecuteCGI = yes
        TimeForCGI = 10
        WrapCGI = mailman
}

VirtualHost {
        ...
        Alias /mailman:/usr/local/mailman/cgi-bin
        Alias /pipermail:/usr/local/mailman/archives/public
        Alias /icons:/usr/local/mailman/icons
        NoExtensionAs = cgi
        EnablePathInfo = yes
        UseDirectory = dir_mailman
        ...
}

Configuration

The configuration is done in /usr/local/mailman/Mailman/mm_cfg.py. Make your changes here, only if they are system wide! Look the default up in Defaults.py. Example settings to change are:

Create the default mailinglist

After you have completed the integration of Mailman and your mail server, you need to create a site-wide mailing list. This is the one that password reminders will appear to come from, and it is required for proper Mailman operation. Usually this should be a list called mailman, but if you need to change this, be sure to change the MAILMAN_SITE_LIST variable in mm_cfg.py. You can create the site list with this command, following the prompts:

/usr/local/mailman/bin/newlist mailman

Now configure your site list. You should also subscribe yourself to the site list.

Create the passwords

There are two site-wide passwords that you can create from the command line, using the bin/mmsitepass script. The first is the site password which can be used anywhere a password is required in the system. The site password will get you into the administration page for any list, and it can be used to log in as any user. Think root for a Unix system, so pick this password wisely!

The second password is a site-wide list creator password. You can use this to delegate the ability to create new mailing lists without providing all the privileges of the site password. Of course, the owner of the site password can also create new mailing lists, but the list creator password is limited to just that special role. To set the site password, use this command:

/usr/local/mailman/bin/mmsitepass <your-site-password>

To set the list creator password, use this command:

/usr/local/mailman/bin/mmsitepass -c <list-creator-password>

Start the mailinglist server

Make your mailman start at boot time by adding mailman to your /etc/rc.conf file and start the service.

Problems

SPF/DKIM

A lot of mailinglist emails will end up in the spamfolder of there clients. There is a solution for this. Change in the mailinlist admin page the option from_is_list to Munge From. This will resend the email and will be originated from the mailinlist email adres and not the sender. This could be seen as spoofing of a mail addres.

To avoid DKIM problems, add the following line your mm_cfg.py and restart Mailman afterwards. This will remove the DKIM headers so DKIM will not fail.

REMOVE_DKIM_HEADERS = 1

Howto/Mailman (last edited 2020-05-01 06:31:30 by Sciuro)