High performance, self-hosted newsletter and mailing list manager with a modern dashboard. Single binary app.

listmonk

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a PostgreSQL database as its data store.

listmonk-dashboard Visit listmonk.app

Installation

Docker

The latest image is available on DockerHub at listmonk/listmonk:latest. Use the sample docker-compose.yml to run listmonk and Postgres DB with docker-compose as follows:

Demo

mkdir listmonk-demo
sh -c "$(curl -sSL https://raw.githubusercontent.com/knadh/listmonk/master/install-demo.sh)"

The demo does not persist Postgres after the containers are removed. DO NOT use this demo setup in production.

Production

  • docker-compose up db to run the Postgres DB.
  • docker-compose run --rm app ./listmonk --install to setup the DB (or --upgrade to upgrade an existing DB)
  • Run docker-compose up app and visit http://localhost:9000.

More information on docs.


Binary

  • Download the latest release and extract the listmonk binary.
  • ./listmonk --new-config to generate config.toml. Then, edit the file.
  • ./listmonk --install to setup the Postgres DB (or --upgrade to upgrade an existing DB. Upgrades are idempotent and running them multiple times have no side effects).
  • Run ./listmonk and visit http://localhost:9000.

Heroku

Using the Nginx buildpack can be used to deploy listmonk on Heroku and use Nginx as a proxy to setup basicauth. This one-click Heroku deploy button provides an automated default deployment.

Deploy

Please note that configuration options must be set using environment configuration variables.

Developers

listmonk is a free and open source software licensed under AGPLv3. If you are interested in contributing, refer to the developer setup. The backend is written in Go and the frontend is Vue with Buefy for UI.

License

listmonk is licensed under the AGPL v3 license.

Owner
Kailash Nadh
CTO @zerodhatech | Volunteer @fossunited
Kailash Nadh
Comments
  • Problems running on Docker

    Problems running on Docker

    Version:

    • listmonk: [eg: v1.0.0]
    • OS: Mac Big Sur 11.04

    Description of the bug and steps to reproduce: I've installed Listmonk on my Mac around two months ago, and after some back and forth, it has worked well. Today I tried to run it again, but a weird thing happened. First, it ran normally, but the DB was a different one, without any history, campaigns, subscribers, nothing. After re-starting, when I launched it via Terminal, the response was an error message:

    [MACHINE NAME] com.docker.docker >> docker compose up
    [+] Running 4/0
     ⠿ Container comdockerdocker_demo-db_1   Running                                                                    0.0s
     ⠿ Container comdockerdocker_demo-app_1  Running                                                                    0.0s
     ⠿ Container comdockerdocker_db_1        Created                                                                    0.0s
     ⠿ Container comdockerdocker_app_1       Created                                                                    0.0s
    Attaching to app_1, db_1, demo-app_1, demo-db_1
    Error response from daemon: driver failed programming external connectivity on endpoint comdockerdocker_db_1 (e2dcf5fd40f60311c43f2f5ca5177bc474eb0b69afd3805e942c5082af0ceb52): Bind for 0.0.0.0:9432 failed: port is already allocated
    

    When I checked on Docker, I saw that there were duplicated instances of Listmonk and Postgres, which I could not remove anyhow:

    Screenshot 2021-06-10 at 14 50 11

    Could you help me to understand what am I doing wrong? Losing the history of the campaigns would be such a pain.

    @mr-karan , I am adding you here following a conversation with Kailash.

    Thanks in advance

  • Bounce processing

    Bounce processing

    I see a lot of you guys have Listmonk implemented in a production env. I was wondering how you guys process the soft and hard bounces and also the complaints.

  • Could you provide a step-by-step install guide?

    Could you provide a step-by-step install guide?

    For some reason, I got stuck on how to properly configure config.toml file. It will be so helpful if you can provide a step-by-step guide on how to install Listmonk. Also, there is no demo for a quick look!

    Please help!

  • packaging needs

    packaging needs

    Is your feature request related to a problem? Please describe.

    There are a few issues I’ve bumped into while packaging listmonk for debian(-based) systems. I adressed some of those in this PR. Maybe we can use this issue to explore some of the remaining stumbling blocks.

    Describe the solution you'd like

    • The LAST_COMMIT and VERSION make variables are currently hardcoded to use git for determining their respective values. Package builds often use release tarballs which do not contain any git metadata. The easiest solution is to make the caller determine these values by using the ?= instead of the := assignment in Makefile. This is what I do in my deb packaging. The downside is that every packager has to do that manually. A lot of other projects store release metadata in the repository.
    • --new-config should respect the --config option. Pratically speaking: calling listmonk --config /etc/listmonk/mysite.toml --new-config should create the config in /etc/listmonk/mysite.toml instead of storing it as config.toml in the current working directory.
    • I know that #326 and #344 already pointed this out, but I want to emphasize it again: I think it would be nice if update checks could be disabled either via the application configuration file or – even better – during build time. It is very common for packagers to disable these checks. There shouldn’t be a need to even render the update-check switch in the frontend in both of these cases.
    • I’d be nice to have a default systemd unit file as part of the project that can serve as a basis for package maintainers. systemd provides a lot of options that reduce the attack surface of an application and it would be nice if we could document any practical and applicable options right here, so they’re discoverable for everyone.

    As @alerque seems to be packaging listmonk for ArchLinux he can probably weigh in on this discussion as well. Consider it a friendly request for comments :).

    I’d be happy to submit pull requests if we reach consensus on solutions for any of the raised issues. Thank you for your time!

    Cheers,

    Konrad

  • How can I validate that SMTP is working correctly ?

    How can I validate that SMTP is working correctly ?

    Hi I am trying listmonk. I see a SMTP connection attempt on my mail server, but nothing after that. How can I debug what's going on on listmonk side, regarding SMTP ? Thank you

  • Public Archive of Previous Campaigns

    Public Archive of Previous Campaigns

    As described in #540 it would be great to have a pages for public archives of previous campaigns. #540 was closed when the other part of the feature request was addressed, so I'm opening this issue to keep this part alive :)

  • Work in progress (v0.7.0-alpha)

    Work in progress (v0.7.0-alpha)

    I've been spending time on and off on:

    • A tiny auth lib to add users and auth after not being able to find a simple enough package. AuthBoss is complex and large.
    • A new settings dashboard.
    • Scrapping React + AntDesign UI. This was a hard decision, but React + Ant is a mess. Despite having written the frontend, I've been unable to internalise or intuitively navigate the mess that is logic interspersed JSX of Ant Design components. I'm considering VueJS + Buefy (10x smaller than Ant). At least templates will look like templates. Would rather do this now when it's alpha than be locked-in. I am unable to recollect the exact reasons for having made this choice in the first place.
  • Add Prometheus metrics

    Add Prometheus metrics

    This pull request implements #627 .

    The goal here is to expose some basic metrics over a Prometheus endpoint.

    ~This is very much a draft PR for now. I would expect this to get rebased into something cleaner before it's taken out of draft state.~ Undrafted, yay! \o/

  • Basic Questions wrt Listmonk

    Basic Questions wrt Listmonk

    Creating a new issue as was asked for earlier :) I am trying to send out a test mail from campaign screen, it says email sent but does not land in my mail (SES dashboard also says 0 emails sent). SMTP settings are done for the same region the destination email ID belongs to (Mumbai). listmonk dashboard also says 0 msg sent.

    Few call outs: I have only 1 SMTP setting enabled (single port) - Do I need to add SMTP settings for all 3 ports? SES account is in sandbox (allows 200 emails to be sent) - can this be the reason? msg rate x concurrency = email rate of SES

  • Return-Path and thus bounce handling not working

    Return-Path and thus bounce handling not working

    Version:

    • listmonk: 2.2.0
    • OS: Debian 11
    • Installation: Single binary started with custom systemd service

    Some configuration infos: Bounce handling is listmonk is on and listmonk expects bounces in a pop3 mailbox.

    Description of the bug: For all outgoing e-mails sent from listmonk, the "Return-Path" header is always exactly the same as the "From" header. Changing the "Return-Path" via custom headers in the campaign settings does not seem to do anything. Changing other headers such as "Errors-To" works. For us, this means, that currently bounces are not sent back to the correct mailbox. It has to be possible in listmonk to set "Return-Path" to a custom mail address, especially considering that our installation will use many different "From" addresses.

    Steps to reproduce:

    1. Set global SMTP custom headers [{"Return-Path": "[email protected]"}] according to documentation on https://listmonk.app/docs/bounces/
    2. Create a campaign.
    3. Set From to [email protected].
    4. Send test mail or start campaign.
    5. Verify headers in our smtp gateway or in Thunderbird on the receiving end.
    6. Header Return-Path is [email protected], which is wrong.
  • POP3 bounce

    POP3 bounce

    Version:

    • listmonk: [eg: v2.0.0]
    • OS: [Docker]

    Hello

    I wanted to set up a pop3 account to handle bounces. The account is running on a mail server, but unfortunately listmonk indicates an error in the log : bounce.go:139: error scanning bounce mailbox: unknown response. Neither -ERR, nor +OK

    Any idea what the solution might be? thx for help !

  • TrackView is not working

    TrackView is not working

    I am using TrackView for tracking views in emails sent via listmonk, as suggested i used TrackView only once in the template also within two curly braces ( {{ TrackView }} ) but I am testing everything in the development environment. How can I resolve this any kind of help will be appreciated

  • bad character U+003D '=' when submitting text containing @TrackLink from the API

    bad character U+003D '=' when submitting text containing @TrackLink from the API

    • listmonk: v2.3.0
    • OS: Debian

    I have been using python requests to submit campaigns to listmonk's API. Everything has been working fine until I decided to include the @TrackLink shorthand appended to each link href in the content body. The full error I am seeing when attempting to preview or edit a campaign that has been created through the API is: {"message":"Error compiling template: error compiling message: template: content:2: bad character U+003D '='"}

    The error is also showing up in the listmonk logs and the campaign will not send.

    If I open the API generated campaign in listmonk, select "Content", view the HTML source in the editor, click "Format HTML", "Save", then "Save Changes" to the campaign the issue is resolved. The campaign becomes fully functional.

    Attached is the "body" value that is returned by the API when the campaign is created. If I remove "@TrackLink" from the hrefs the error goes away. body.txt

  • Accepting AWS SNS notifications (Delivery, Send, ...) as Bounce

    Accepting AWS SNS notifications (Delivery, Send, ...) as Bounce

    Version:

    • listmonk: v2.3.0
    • OS: Docker Image

    Description of the bug and steps to reproduce: I initially setup in AWS SNS to send all even types (Delivery, Send, ...) and I noticed in listmonk Bounces list that emails with delivery status were also marked as bounce. I then changed to only send notification for Bounces.

    In the code I don't see any checks for eventType, I think we should add check in code to make sure the eventType is Bounce (and maybe also Complaint?) In sesMail struct, I see notificationType but not eventType where I noticed the Bounce event type.

    Payload for notificationType = Delivery

    {
      "mail": { ... },
      "delivery": { ... },
      "notificationType": "Delivery"
    }
    

    Payload for eventType = Bounce

    {
      "mail": { ... },
      "bounce": { ... },
      "eventType": "Bounce"
    }
    
  • Default

    Default "From" field generates 5.6.7 SMTP bounce on Google Workspace MX servers

    Version:

    • listmonk: v2.3.0
    • OS: Debian 11u5

    Description of the bug and steps to reproduce: I sent myself an e-mail using the SMTP connection test tool (to a Google Workspace mailbox). I get a 5.6.7 SMTP bounce from the Google Workspace servers.

    So given the nature of the 5.6.7 error, it's most likely related to the quotes between the sender name, like Listmonk does: "Name" <[email protected]>, since I tried exactly the same e-mail from another client (Evolution) that builds the From: field in the following way: Name <[email protected]> (without any quotes around the sender name) and the e-mail gets through without any issue.

    How can I proceed from there? Write a patch?

    Thank you in advance.

Robust and flexible email library for Go

email Robust and flexible email library for Go Email for humans The email package is designed to be simple to use, but flexible enough so as not to be

Dec 30, 2022
:inbox_tray: An IMAP library for clients and servers

go-imap An IMAP4rev1 library written in Go. It can be used to build a client and/or a server. Usage Client package main import ( "log" "github.com

Jan 6, 2023
:envelope: A streaming Go library for the Internet Message Format and mail messages

go-message A Go library for the Internet Message Format. It implements: RFC 5322: Internet Message Format RFC 2045, RFC 2046 and RFC 2047: Multipurpos

Dec 26, 2022
Golang package for send email. Support keep alive connection, TLS and SSL. Easy for bulk SMTP.

Go Simple Mail The best way to send emails in Go with SMTP Keep Alive and Timeout for Connect and Send. IMPORTANT Examples in this README are for v2.2

Jan 8, 2023
Using Mailchain, blockchain users can now send and receive rich-media HTML messages with attachments via a blockchain address.

Mailchain Introduction Mailchain enables blockchain-based email-like messaging with plain or rich text and attachment capabilities. Using blockchain p

Dec 28, 2022
Web and API based SMTP testing
Web and API based SMTP testing

MailHog Inspired by MailCatcher, easier to install. Download and run MailHog Configure your outgoing SMTP server View your outgoing email in a web UI

Jan 4, 2023
MIME mail encoding and decoding package for Go

enmime enmime is a MIME encoding and decoding library for Go, focused on generating and parsing MIME encoded emails. It is being developed in tandem w

Nov 30, 2022
A simple Go POP3 client library for connecting and reading mails from POP3 servers.

go-pop3 A simple Go POP3 client library for connecting and reading mails from POP3 servers. This is a full rewrite of TheCreeper/go-pop3 with bug fixe

Dec 17, 2022
a simple api that sent spam via sms and email

a simple api that sent spam via sms and email routes: /sms /email example request with python

Oct 19, 2021
📮 Simple (but useful) email sender written in pure Go v1.17. Support HTML templates and attachments.

?? Go Email Sender Simple (but useful) email sender written in pure Go v1.17. Yes, yet another email package here! ?? Support HTML templates and attac

Dec 31, 2021
Monitoring and automation for Open Source email servers, starting with Postfix.
Monitoring and automation for Open Source email servers, starting with Postfix.

Welcome to Lightmeter Control Center, the Open Source mailops monitoring application.

Dec 19, 2022
A simple microservice designed in Go using Echo Microframework for sending emails and/or calendar invitations to users.

Calenvite A simple microservice designed in GO using Echo Microframework for sending emails and/or calendar invitations to users. Features Send emails

Oct 29, 2022
Filtering spam in mail server, protecting both client privacy and server algorithm

HE Spamfilter SNUCSE 2021 "Intelligent Computing System Design Project" Hyesun Kwak Myeonghwan Ahn Dongwon Lee abstract Naïve Bayesian spam filtering

Mar 23, 2022
Email-searcher - Given a domain name and real name, attempt to find an existing email for that user.

email-searcher Given a domain name and real name, attempt to find an existing email for that user. Using Run it with both the domain and name flags, l

Jan 2, 2022
Hxgomail - Gomail - a simple and efficient package to send emails

Gomail Introduction Gomail is a simple and efficient package to send emails. It

Jan 4, 2022
BotHub - BotHub is a web-based robot editor built in go with support for go and python

Robot Simulator This is an application to simulate toy robot moving on a square

May 16, 2022
Sending emails using email server talking to RabbitMQ and send grid server sending emails to email ids consumed from RabbitMQ
Sending emails using email server talking to RabbitMQ and send grid server sending emails to email ids consumed from RabbitMQ

Sending emails using email server talking to RabbitMQ and send grid server sending emails to email ids consumed from RabbitMQ

Oct 27, 2022
listmonk is a standalone high performance, self-hosted newsletter and mailing list manager with a modern dashboard. Single binary app.
listmonk is a standalone high performance, self-hosted newsletter and mailing list manager with a modern dashboard. Single binary app.

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a PostgreSQL database as its data store.

Jan 1, 2023
listmonk is a standalone, self-hosted, newsletter and mailing list manager
listmonk is a standalone, self-hosted, newsletter and mailing list manager

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a Postg

Aug 15, 2022
Listmonk - a standalone, self-hosted, newsletter and mailing list manager
Listmonk - a standalone, self-hosted, newsletter and mailing list manager

listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. It uses a Postg

Jan 13, 2022