Starting a Newsletter using Listmonk
I have been thinking about starting and maintaining a email list for a long time, and today I finally made it live. It wasn't a straightforward process but wasn't extremely complicated either, I had to Google a lot and was finally able to set everything up as I wanted.
For the setup, I used Listmonk (self-hosted) for managing the list and Amazon SES for sending the emails. I will try my best to explain the entire process.
But before I start, below is the form if you'd like to subscribe to my list. I have kept it simple to match the aesthetics of my website, and currently only showing the form in the footer.
Now, let's get to it.
What is Listmonk?
Listmonk is a self hosted email newsletter and mailing list tool. It lets you collect subscribers, manage lists, design emails, and send campaigns using your own email provider like Amazon SES, Mailgun, Sendgrid, and Postmark.
You control your data, your server, and how emails are sent, without paying per subscriber. It's great for newsletters, product updates, and simple email automation.
What is Amazon Simple Email Service (SES)?
Amazon SES (Simple Email Service) is a cloud email sending service from AWS. It is used to send emails at scale for things like newsletters, app notifications, and transactional emails.
You connect your app or tool like Listmonk to SES, and SES handles delivery, spam checks, and inbox reliability while charging based on how many emails you send.
Self-hosting Listmonk
I hosted Listmonk on a Hetzner VPS (CX23, costs $3.5/mo) via Dokploy and it took less than 5 minutes. Here are the steps:
- Create an account on Hetzner, get verified, and create a new server. Even the cheapest server CX23 would be more than enough.
- SSH into the server, and install Dokploy by following the instructions on their official website.
- Open Dokploy, create a new project and create a new service by selecting the already available Listmonk option. Add a custom domain and then deploy the service.
If you see an outdated version of Listmonk in the Docker Compose file, change it to the latest version. In my case, it was v5.0.0 in the Docker Compose file, so I changed it to v6.0.0 which is the latest.
After the deployment is successful, visit the domain you added and register a new Listmonk account, and you should now be inside the app.
Getting the Amazon SES details
I didn't even have a AWS account so I was thinking it's going to be a complicated process, but it wasn't. I asked ChatGPT to guide me through the process and it did, I just kept providing it with screenshots.
- Sign up or log in to the AWS account from here: https://aws.amazon.com/ses/
- SES asks you to add and verify your email address and sending domain as well. For example, add and verify
you@yoursite.comand also your domainyoursite.com. - Keep other options in these sections as the default: Deliverability enhancements, Create your Dedicated IP pool, and Add tenant management. Review everything and click on Get started.
- Verify your sending domain by adding a bunch of CNAME, DMARC, and SPF records at your domain registrar (or at Cloudflare if you're using it).
- Now, create SMTP credentials and get the SMTP username, SMTP password, and AWS region (you'll need these inside Listmonk).
I will suggest using ChatGPT, Gemini, or any other AI provider to guide you through everything.
Setting up Listmonk
Now, let's get through the process of setting up Listmonk:
1. General settings
First, you need to do some basic settings in the Settings > General tab, as you see in the screenshot here.
- Site name: Add the name of your website where you will be showing the subscription form.
- Root URL: Add the root URL of where you have hosted Listmonk. Generally, people host at a subdomain of their main domain so the URL will be something like below
https://list.yoursite.com
- Logo URL: This is the logo that is shown at the top of your emails, you can upload the logo to the media library and add the URL here.
- Favicon URL: This is shown as the favicon on the public archive pages, if you choose to make your issues public.
- Default
fromEmail: Add your email that you want to send from. - Admin notification emails: Add your email where you want to receive the notification when a campaign gets completed, and other admin related things.
2. SMTP settings
You now have do the SMTP settings and you will need your Amazon SES credentials that you created earlier. See the below screenshot for more info.
- Enabled: Should be turned on.
- Host: You need to add this, but replace the AWS_REGION here:
email-smtp.AWS_REGION.amazonaws.com
- Port: Use 587 as the SMTP server port.
- Auth protocol: Use LOGIN.
- Username: Paste the AWS SES username here.
- Password: Paste the AWS SES password here.
- HELO hostname: Leave it empty.
- TLS: Selet STARTTLS here.
- Name: Name anything you want.
And keep other options as the default. You can see above screenshot for more info.
You can test the setup by clicking on the Test Connection on the same screen. And if your SES account is not verified yet, you will only be able to send the email to yourself (the one you added in the AWS SES account).
3. Setting up the subscription form
Inside Listmonk, go to the Lists > All lists and rename the default list to the name of your newsletter. This will be seen by the users in the welcome email. You can select between single and double opt-in. I like to have double opt-in, because it's good for deliverability and also that only serious people get into your list.
Once the list is ready, navigate to Lists > Forms and you can either share the subscription form as the shown URL or get the HTML and embed it on your website.
I have embedded the HTML on my website and it looks like this:
<div class="newsletter-form">
<p>One email every week on AI, tech, and marketing finds I'd tell a friend about.</p>
<form method="post" action="https://listmonk.yoursite.com/subscription/form" class="listmonk-form">
<input type="hidden" name="nonce" />
<input type="hidden" name="l" value="9dcc7bc2" />
<input type="email" name="email" required placeholder="Your email" />
<input type="text" name="name" required placeholder="Your name" />
<input type="submit" value="Subscribe" />
</form>
<p class="newsletter-note">No spam, just chaos.</p>
</div>
I have then added some CSS to make it look like how it currently looks in my website's footer. On mobile, form fields appear one above another.
4. Setting up a campaign template
I like sending plaintext emails so I had to create a new campaign template from Campaigns > Templates, but if you're fine with the default campaign template (you can see the preview), there's no need for this step.
Actually, it's not absolutely plaintext because I want to use the HTML's hyperlink feature.
As you can see, it's just basic HTML for adding hyperlink in Unsubscribe and View in browser links. I could use plaintext as well here, but the links look very ugly in the email.
5. Sending a test campaign
I recommend to subscribe to your own newsletter and then send a test campaign to make sure everything is working as expected. For sending a newsletter issue, go to Campaigns > All campaigns, delete the existing campaigns, and create a new one.
- Name: Name it anything, it's internal and not shown to the subscribers.
- Subject: The email subject that you want subscribers to receive.
- Subject: From address that you added in Settings earlier and that you want to send the newsletter emails from.
- Lists: Select the list or lists of subscribers whom you want to send the emails to.
- Messenger: Keep as
email. - Format: Select Rich text as the format.
- Tags: Optional.
- Send later: If you want to schedule, use Send later option and select date and time to send. Otherwise, keep it turned off.
Now, Save and go to the Content tab, select Rich text as the format, select either the default template or the new template you created previously, and start writing your newsletter.
As you see in the above screenshot, .Subscriber.Name between double curly braces will be replaced by the actual name of the subscriber. You can learn more about template expressions from this page in their docs.
After finishing writing, you can preview how it will look to the user, save changes, and start the campaign by clicking on the Start campaign button at the top.
And seconds later, I received this test email in my Gmail account. It plaintext, mostly, and just uses HTML for the hyperlinks and will probably use for images (if I add).
That's it.
If you're setting Listmonk for yourself and got stuck somewhere, please email me and I would be happy to help.
Update: Feb 4, 2026
Amazon has rejected my application for SES approval without giving any proper reasons, and I received this email from them.
So now, SES out of the question, I am evaluating other options which are affordable and that I can keep running for a long time.
Will update this page as I progress.
Some links on this page are affiliate links. If you buy through them, I may earn a small commission at no extra cost to you. However, this does not affect my opinions.
Webmentions