Listmonk is an amazing feature-packed self-hosted email newsletter manager. It offers loads of features like analytics (clicks, opens, bounces), templates, public subscription pages, importing subscribers, and much more!
Listmonk is a self-hosted newsletter and mailing list manager. It is free and open source, so you have full control over your data. It also offers a super clean webui:
For me, running a newsletter means owning my email list.
When people create newsletters, they want to break free from big platforms like Twitter or YouTube. When you use a proprietary service like Mailchimp, you’re still tied down to their rules and limitations. With listmonk, you get more control and independence, which for me is a huge win.
The other reason is that listmonk is completely free (if you don’t count electricity bills/VPS hosting bills). Even if you include the cost of your email host + hosting fees, it is still tiny compared to Mailchimp or Buttondown.
And more
A server running Linux, either in the cloud or at home. We will be using Debian 12, but you can use any other distribution.
An email address to send the newsletter from. Can either be a Gmail or a custom one.
Before doing anything, I highly recommend that you disable password logins for ssh. See Securing ssh with Key-Based Authentication for more info on how to do that.
Login to your server via ssh.
ssh [email protected]
Make sure that all packages are up to date.
sudo apt update && sudo apt upgrade
Create a new directory to host listmonk’s configuration files.
mkdir listmonk && cd listmonk
Download the listmonk production script (I highly recommend you read the scripts before running them).
sh -c "$(curl -fsSL https://raw.githubusercontent.com/knadh/listmonk/master/install-prod.sh)"
Now, if you head to
localhost:9000
You should see listmonk up and running.
But first, we should change some settings in the configuration files.
vim config.toml
Here, you can change the default admin password. I also changed the address to 0.0.0.0 so that I can access it via the server’s IP.
Now, head to the webui at
localhost:9000
Login, and head to the settings.
In the General
tab, you can customize the default from email, root URL, site name, favicon, and admin notification emails.
Here’s what my settings look like:
You can customize the page to your liking.
Save by clicking on the save button in the top right corner.
For the next part, you will either need a Gmail account or any other email provider that gives you an SMTP connection.
If you want a great custom email, I recommend Ionos, you can get up to 10$ in credits by using my link Ionos - Email & Office 10$ credits which is the provider that I am currently using.
In this guide, I will show you how to set this up for these two providers, but the setup should be similar for others too.
IMPORTANT: Both of these hosts have a limit on how many emails can be sent out per hour or per day. For Ionos, that is 500/hour. Setting up a Sliding Window Limit is very important.
I recommend that you use a different Gmail account from your personal one.
The first thing you will have to do is generate an app password; to do that, head to Create and manage app passwords, and create a new one called listmonk. Copy the password that is generated, and save it somewhere safe.
Now, head over to the listmonk webui.
In the SMTP
tab, in settings you will find this:
Click on the Gmail option as circled.
Now, enter your full email address (including @gmail.com) in the username field.
And in the password field, enter the app password we generated before.
Now, click on the Test connection
button in the bottom right corner, enter a test email, and click on Send e-mail
.
If you configured everything correctly, you should now get a test message to the email specified.
Don’t forget to save!
You should probably generate a new email for the newsletter, e.g., `[email protected].
Head over to the listmonk webui.
Now, in the SMTP
tab in the settings you see this.
The Ionos smtp server settings are:
Host: smtp.ionos.com
Port: 465
TLS: SSL/TLS
IMPORTANT: If you’re using IONOS UK or another specific regional version, you need to adjust the hostname. For example, if you’re on IONOS UK, you should use smtp.ionos.co.uk
instead of the global smtp.ionos.com
.
Now, in the username field, you should enter the full email address [email protected]
and the password is the normal user password.
Now, to test the connection click on the Test connection
button in the bottom right corner, enter a test email, and click on Send e-mail
.
If you configured everything correctly, you should now get a test message to the email specified.
Don’t forget to save!
This is very important to set up when email providers limit the amount of email to be sent per hour or per day. You can access the Sliding window limit in Settings
under the performance tab. For Ionos, I have it set at 500 emails/hour.
I will be making my instance publicly accessible using Cloudflare tunnels.
To do this, you will need a Cloudflare account and a domain pointed to Cloudflare.
First, head to the Zero Trust Dashboard.
Under Networks
, click on Tunnels
and then Create a tunnel.
Once created you should Install and run a connector
, follow the instructions on the page for your specific setup.
After the connector is running, you should click on the Public Hostname
tab and Add a public hostname
.
Now, you should see something like this:
Fill in the info as I have.
The service type should be HTTP
and the URL should be yourserverurl:9000
, in my case, that’s 127.0.0.1:9000.
Now, if you head to the domain that you specified you should see gitea up and running.
In my case, you can access my newsletter page here.
These are all of the features that listmonk offers:
Listmonk offers amazing built-in template support.
All templates are written in HTML.
You can access the templates by going to Campaigns > Templates
.
Don’t forget to always include {{ template "content" . }}
(for the main content) and also an unsubscribe button in all of your templates
You can create a new campaign (email) by going to Campaigns > All Campaigns.
Here, you can select a campaign name, subject the lists you want to target, and the template.
You can create new lists by going to Lists > All Lists
.
For example, I have two lists:
New posts - Receive an email every time I post something new on my blog.
Weekly Roundup - Join my weekly roundup, where I share what I’ve been up to that week, including articles I’ve published, cool finds, tips and tricks and more!
Not everyone wants to receive an email every time I post a new article, so I created two lists!
Listmonk also offers embeddable HTML forms to subscribe to the email list. You can access the form builder by going to Lists > Forms
Except for the HTML forms, listmonk also has a public subscription page. For example, here is mine.
It can also be accessed under `Lists > Forms
You can track the views, clicks and bounces of your email campaigns by going to Campaigns > Analytics
.
You can import subscribers from other platforms by going to Subscribers > Import
. It currently supports CSV or ZIP files.
These are the most important features that listmonk offers (I’m sure I forgot some).
If this article helped you out, consider joining my (listmonk) newsletter below:
Subscribe to my newsletter here.