Summary
With mail servers, Just forwarding emails to multiple addresses is easy.
Also, we can build an advanced mailing list system.
This post is about how to build a GNU Mailman server on OpenBSD.
Environment
- OS: OpenBSD 6.7
- MTA (Mail Transfer Agent): OpenSMTPD
- Mailing List Server: GNU Mailman 2.1
Tutorial
The package manager is available and useful because it provides well-configured setting files as well as applications.
Just run:
# pkg_add mailman
The result is:
quirks-3.325 signed on 2020-06-04T16:43:21Z mailman-2.1.32:python-2.7.18p0: ok mailman-2.1.32:py-setuptools-41.6.0v0: ok mailman-2.1.32:py-dnspython-1.16.0p2: ok File /var/spool/mailman/data/sitelist.cfg could not be installed: No such file or directory mailman-2.1.32: ok The following new rcscripts were installed: /etc/rc.d/mailman See rcctl(8) for details. New and changed readme(s): /usr/local/share/doc/pkg-readmes/mailman
Well, it is useful to read /usr/local/share/doc/pkg-readmes/mailman
above.
Then, edit the config file:
# # (optional) make a backup beforehand: # # cp -p /usr/local/lib/mailman/Mailman/mm_cfg.py /usr/local/lib/mailman/Mailman/mm_cfg.py.org # nvim /usr/local/lib/mailman/Mailman/mm_cfg.py
to add the lines in the end of the file:
# Put YOUR site-specific settings below this line. + MAILMAN_GROUP = '_mailman' + MAILMAN_USER = '_mailman'
It is because, without them, the errors below occur at starting the mailman
daemon:
gid = grp.getgrnam(mm_cfg.MAILMAN_GROUP)[2] KeyError: 'getgrnam(): name not found: '
uid = pwd.getpwnam(mm_cfg.MAILMAN_USER)[2] KeyError: 'getpwnam(): name not found: '
Next, you need to create the first list in order to escape from the error at starting the mailman
daemon:
Site list is missing: mailman
The detail is here in the official documentation.
Run the Mailman command:
# /usr/local/lib/mailman/bin/newlist mailman
which is followed by:
Enter the email of the person running the list: <your@email.address> Initial mailman password:
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: "|/usr/local/lib/mailman/mail/mailman post mailman" mailman-admin: "|/usr/local/lib/mailman/mail/mailman admin mailman" mailman-bounces: "|/usr/local/lib/mailman/mail/mailman bounces mailman" mailman-confirm: "|/usr/local/lib/mailman/mail/mailman confirm mailman" mailman-join: "|/usr/local/lib/mailman/mail/mailman join mailman" mailman-leave: "|/usr/local/lib/mailman/mail/mailman leave mailman" mailman-owner: "|/usr/local/lib/mailman/mail/mailman owner mailman" mailman-request: "|/usr/local/lib/mailman/mail/mailman request mailman" mailman-subscribe: "|/usr/local/lib/mailman/mail/mailman subscribe mailman" mailman-unsubscribe: "|/usr/local/lib/mailman/mail/mailman unsubscribe mailman" Hit enter to notify mailman owner...
In order to follow the messages, edit it:
# nvim /etc/mail/aliases
and run:
# newaliases /etc/mail/aliases: xx aliases
As it is written in /usr/local/share/doc/pkg-readmes/mailman
, it is necessary to add a group to the MTA user:
# usermod -G _mailmanq _smtpd
It is almost done.
Well, optionally, I had two additional modification.
#1. I had to modify /etc/mail/smtpd.conf
to let OpenSMTPD accept requests from egress
to the mailing list domain.
I modified /etc/mail/smtpd.conf
like:
... listen on egress \ tls pki <pki> \ auth-optional \ tag MTA ... action "local" maildir alias <aliases> ... + match tag MTA from any for domain "<fqdn>" action "local" ...
#2. I set up default list settings.
# nvim /usr/local/lib/mailman/Mailman/mm_cfg.py
# Put YOUR site-specific settings below this line. ... + DEFAULT_URL_HOST = '<mail-server-fqdn>' + DEFAULT_EMAIL_HOST = '<mailing-list-domain>' + add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
Let's start the mailing list system:
# rcctl -f -d start mailman doing _rc_parse_conf doing _rc_quirks mailman_flags empty, using default >-s start< doing _rc_parse_conf /var/run/rc.d/mailman doing _rc_quirks doing rc_check mailman doing rc_start doing _rc_wait start doing rc_check Starting Mailman's master qrunner. doing _rc_write_runfile (ok)
Now you may operate lists via command line :)
The commands MailMan provides are here.
For example, running /usr/local/lib/mailman/bin/newlist <list-name>
will create your first list.
Have you decided to use Mailman?
If so, the last steps are registering cron jobs and enabling the daemon to let it start at boot.
# crontab -u _mailman /usr/local/lib/mailman/cron/crontab.in
# rcctl enable mailman
Thank you for your reading.
I hope you enjoy the networks :)
Top comments (0)