#lang en <> = 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: * DEFAULT_EMAIL_HOST * DEFAULT_URL_HOST == 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 }}} To set the list creator password, use this command: {{{ /usr/local/mailman/bin/mmsitepass -c }}} It is okay not to set a list creator password, but you probably do want a site 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 }}}