How a single self-hosted instance powers newsletters, contact forms, and outreach for your entire portfolio of niche websites.
Every niche site talks to the same Listmonk instance. No per-site email backend needed.
Listmonk handles the entire double opt-in process automatically. You only build the signup form.
Frontend calls POST /api/public/subscription with email and the site's list UUID. No auth needed.
Listmonk immediately sends a "please confirm your email" message via SES. Subscriber status is unconfirmed.
Listmonk verifies the token, marks subscriber as confirmed, and sends a welcome email (if configured).
Create a campaign in the Listmonk UI, pick the site's list, pick the branded template, write content, send.
Every email includes an unsubscribe link. Listmonk processes it, removes from list, never emails again.
// Same code for every site // Only list_uuids differs const subscribe = async (email: string) => { const res = await fetch( 'https://mail.lte-speedtest.com' + '/api/public/subscription', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, list_uuids: [ '<this-site-list-uuid>' ] }) } ); if (res.ok) return 'check-inbox'; throw new Error('subscribe failed'); };
curl -u "outreach-api:<token>" \ -X POST \ https://mail.lte-speedtest.com/api/lists \ -H "Content-Type: application/json" \ -d '{ "name": "my-site.com Newsletter", "type": "public", "optin": "double", "tags": ["my-site.com"] }' # Save the returned uuid → use in frontend
Each site gets its own mailing list. Subscribers never mix. Campaigns target exactly one list.
932770eb-bc02-49cc-a8b7-...A subscriber on sitzio.de only gets sitzio.de campaigns. Campaigns target exactly one list. No accidental blasts to the wrong audience.
Each site gets its own email template — colors, logo, tone. The campaign engine picks the right template automatically.
The same outreach-api token works for everything. Or create per-site API users in Settings → Users for isolation.
Create list via API, copy UUID into the frontend subscribe form, done. No new servers, no new credentials, no configuration.
Contact forms aren't newsletter functions — they route through the auth-server backend, then notify you via Listmonk transactional email.
# Admin notification from contact form curl -u "outreach-api:<token>" \ -X POST \ https://mail.lte-speedtest.com/api/tx \ -H "Content-Type: application/json" \ -d '{ "subscriber_email": "hi@adeelafz.al", "template_id": <contact-template-id>, "subject": "New Contact: sitzio.de", "data": { "name": "John Doe", "email": "john@example.com", "message": "Hello..." } }' # Response: {"data": true}
Base URL: https://mail.lte-speedtest.com/api/ · Auth: Basic outreach-api:<token>
All emails go through SES in eu-central-1. SMTP connects via SSL on port 465 from the Listmonk container.
Listmonk covers the core compliance requirements. A few things remain your responsibility per site.
Listmonk sends confirmation email, records consent timestamp, only activates after click. No code needed.
Every campaign email includes an unsubscribe link via {{ UnsubscribeURL }}. Processed automatically.
Added to all emails. Allows one-click unsubscribe directly from Gmail, Outlook, and other clients.
Each site's /datenschutz page must mention newsletter data processing, Listmonk, and lte-speedtest.com as infrastructure.
Link to /datenschutz from every subscribe form and contact form. Required for lawful consent.
Contact form submissions stored in SQLite. Mention this in privacy policy and define a retention period.
Everything to do when adding a new niche site to the Listmonk infrastructure.