A minimalistic mailing list
Verteilzentrum is a minimalistic mailing list following the KISS philosophy.
Features:
- Single config file
- Multiple lists
- Blacklisting
- Whitelisting
- Persistent Receivers
- Configurable publishing rights
- Sending through an external MTA
- Install golang (>=1.15), gcc, make and build-essential if you don't have them already
- Clone the repository:
git clone https://github.com/bn4t/verteilzentrum.git
- Checkout the latest stable tag
- Make sure
go
is in your$PATH
and runmake build
to build the verteilzentrum binary - Run
sudo make install
to install verteilzentrum on your system. This will create the directories/etc/verteilzentrum
(config directory) and/var/lib/verteilzentrum
(data directory). Additionally the userverteilzentrum
will be created. - If you have systemd installed you can run
sudo make install-systemd
to install the systemd service. Runservice verteilzentrum start
to start the verteilzentrum service. Verteilzentrum will automatically run as theverteilzentrum
user.
You can make certificates and private key files accessible to the verteilzentrum
user with the following command:
setfacl -m u:verteilzentrum:rx <directory_with_certs>
To increase deliverability it is recommended to set up an SPF and DMARC record for the MTA.
Send an email (content doesn't matter) to subscribe+$list_name
. E.g. subscribe+news@lists.example.com
.
You will receive a confirmation email that subscribing was successful.
Send an email (content doesn't matter) to unsubscribe+$list_name
. E.g. unsubscribe+news@lists.example.com
.
You will receive a confirmation email that unsubscribing was successful.
By default the config is located at /etc/verteilzentrum/config.toml
.
The logging level for verteilzentrum. Can be one of the following:
DEBUG
=> Everything is loggedINFO
=> Everything is logged except debug messagesERROR
=> Only errors are logged
The address including port on which the server should listen for non tls connections.
Listens by default on 0.0.0.0:25
.
The address including port on which the server should listen for tls connections. Can be left empty if no tls certificates are configured.
Listens by default on 0.0.0.0:465
.
The hostname of the list server. If you specify a TLS certificate it has to be valid for this hostname.
SMTP read timeout in milliseconds.
SMTP write timeout in milliseconds.
Maximum incoming message size in bytes.
Path to the TLS certificate file.
Path to the corresponding private key to the TLS certificate.
To disable inbound TLS just comment out both TLS settings.
The location where all persistent data is stored.
The address of the mta used to send mailing list messages.
This mta is used to send messages for all configured mailing lists including subscription notifications.
The auth method used for authentication to the mta.
Can be either PLAIN
or ANONYMOUS
.
The username used for authentication to the mta.
The password used for authentication to the mta.
[verteilzentrum]
logging = "INFO"
bind_to = "0.0.0.0:25"
bind_to_tls = "0.0.0.0:465"
hostname = "lists.example.com"
read_timeout = 100000
write_timeout = 100000
max_message_bytes = 1048576 # 1024 * 1024
tls_cert_file = "/some/path/cert.pem"
tls_key_file = "/some/path/key.pem"
data_dir = "/var/lib/verteilzentrum"
mta_address = "smtp.example.com"
mta_auth_method = "PLAIN"
mta_username = "lists@example.com"
mta_password = "secret"
Lists are represented as toml tables in an array.
The name of the list which also serves as the list address.
Array of email addresses which always receive mailing list messages regardless of whether they are subscribed.
Array of whitelisted email addresses which are allowed to interact with the list. Supports wildcards.
If empty the whitelist is disabled.
Array of blacklisted email addresses.
Blacklisted addresses are not allowed to interact in any way with the list. Can be empty. Supports wildcards.
Important: The Blacklist has a higher priority than the whitelist.
Array of email addresses which are allowed to publish messages to the list. Supports wildcards.
[[list]]
name = "private-list@lists.example.com"
persistent_receivers = []
whitelist = ["hostmaster@example.com","john@example.com"]
blacklist = []
can_publish = ["hostmaster@example.com"]
[[list]]
name = "public-list@lists.example.com"
persistent_receivers = ["archive@example.com"]
whitelist = []
blacklist = ["spam@example.com"]
can_publish = ["moderator@example.com", "admin@example.com"]
For further examples take a look at the example config.
-config <config file>
- The location of the config file to use. Defaults toconfig.toml
in the working directory.
Run sudo make uninstall
to uninstall verteilzentrum.
This will remove the verteilzentrum binary and the directories /etc/verteilzentrum
and /var/lib/verteilzentrum
if they are empty.
To remove the systemd service run sudo make uninstall-systemd
.
Feel free to send patches to me@bn4t.me or to open pull requests on Github.
This project is licensed under the GPL version 3 and later. See the LICENSE file.