Wie ein Newsletter-System dir Zeit sparen kann

Wie ein Newsletter-System das nerviges Anschreiben von einer Vielzahl an Empfänger einfach zu einem Traum machen kann 🥂

Wie ein Newsletter-System dir Zeit sparen kann
Photo by Mathyas Kurmann / Unsplash / Image

Vor Kurzem hatte ich ein kleines bis größeres bauliches Problem bei uns im Haus, weswegen ich einen Sachverständigen suchte. Die IHK hat mir dann eine Liste mit ca. 15-20 Sachverständigen gegeben, die ich alle einzeln anschreiben wollte. Jedoch war es mir zu aufwändig nun immer die gleiche Mail (bis auf die Anrede) manuell in meinem Mailprogramm zu schreiben. Dann kam mir die Idee mit einem Newsletterprogramm, was man dafür sehr gut nutzen kann und auch in Zukunft vermutlich gute Dienste leisten könnte.

Warum ein Newsletter-System? 🤔

Ein Newsletter-System hat halt den charmanten Vorteil, dass man eine Kampagne aufsetzt und dort eine Mail als Vorlage hinterlegen kann. Zudem können dann gewisse Textpassagen mit Platzhaltern aus den Benutzerdaten eingepflegt und beim Versand automatisch ersetzt werden. Mega!

Welches System? 👨‍💻

Es ging nun an die Recherche welches System hierfür brauchbar wäre. Meine Eckpunkte waren:

  • Lauffähig in einem Docker-Container (kostenfrei)
  • Import von CSV/JSON
  • Schöne und einfach zu nutzende Oberfläche

Bei meiner Recherche bin ich recht schnell auf Listmonk gestoßen.

listmonk - Free and open source self-hosted newsletter, mailing list manager, and transactional mails
Send e-mail campaigns and transactional e-mails. High performance and features packed into one app.

Was kann Listmonk? 🤯

Listmonk ist eine Open-Source-Software zur Verwaltung und Versendung von Newslettern. Entwickelt von Zerodhatech, bietet sie eine Vielzahl an Funktionen, die sowohl für kleine Unternehmen als auch für große Konzerne geeignet sind. Die Software wurde in Go programmiert und verwendet eine PostgreSQL-Datenbank, was sie extrem schnell und effizient macht. Listmonk ist frei verfügbar und kann von jedem genutzt und angepasst werden. Das bedeutet, dass du keine Lizenzgebühren zahlen musst und die Freiheit hast, die Software nach deinen Bedürfnissen zu verändern. Durch die Verwendung von Go und PostgreSQL kann Listmonk Millionen von E-Mails pro Stunde verarbeiten. Egal, ob du eine kleine Liste mit Abonnenten hast oder eine riesige Datenbank verwalten musst, Listmonk schafft das problemlos. Listmonk bietet zahlreiche Anpassungsmöglichkeiten, von der Gestaltung der E-Mails bis hin zur Verwaltung der Abonnentenlisten. Du kannst verschiedene Templates verwenden, A/B-Tests durchführen und detaillierte Analysen deiner Kampagnen erhalten.

Die Installation 🛠️

Sofern du bereits einen Docker-Host hast, kannst du einfach die nachfolgende Compose-File übernehmen, hier ist schon alles wesentliche integriert. Du musst nur die Kennwörter etc. ändern und Ablageorte der Dateien für dein System anpassen.

# NOTE: This docker-compose.yml is meant to be just an example guideline
# on how you can achieve the same. It is not intented to run out of the box
# and you must edit the below configurations to suit your needs.

version: "3.7"

x-app-defaults: &app-defaults
  restart: unless-stopped
  image: listmonk/listmonk:latest
  ports:
    - "9000:9000"
  
  environment:
    - LISTMONK_db__ssl_mode=disable
    - LISTMONK_db__host=db
    - LISTMONK_db__port=5432
    - LISTMONK_db__user=listmonk
    - LISTMONK_db__password=listmonk
    - LISTMONK_db__database=listmonk
    - LISTMONK_app__admin_username=Dein Uuser
    - LISTMONK_app__admin_password=Dein PW
    - TZ=Europe/Berlin


x-db-defaults: &db-defaults
  image: postgres:13-alpine
  ports:
    - "9432:5432"
    
  environment:
    - POSTGRES_PASSWORD=listmonk
    - POSTGRES_USER=listmonk
    - POSTGRES_DB=listmonk
    - TZ=Europe/Berlin
  restart: unless-stopped
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U listmonk"]
    interval: 10s
    timeout: 5s
    retries: 6

services:
  db:
    <<: *db-defaults
    container_name: listmonk_db
    volumes:
      - /mnt/user/appdata/listmonk/db:/var/lib/postgresql/data

  app:
    <<: *app-defaults
    container_name: listmonk_app
    #command: [sh, -c, "yes | ./listmonk --install --config config.toml && ./listmonk --config config.toml"]
    depends_on:
      - db
    volumes:
      - /mnt/user/appdata/listmonk/config.toml:/listmonk/config.toml
      - /mnt/user/appdata/listmonk/uploads:/listmonk/uploads

Das war's auch schon mit der Installation. Danach sollte dann Listmonk bereit sein für dich und es sollte über deine IP über den Port 9432erreichbar sein:

Konfiguration des Mailversands 📫

In den Einstellungen musst du dann definieren, über welche Mailbox die E-Mails versendet werden. Das geht eigentlich bei jedem Anbieter der SMTP anbietet. Unter den Einstellungen kannst du einfach so viele SMTP-Konten anlegen und darüber dann deine Kampagnen versenden.

Import von Kontaktdaten 👥

Wichtig war mir, dass ich Kontaktdaten, eine Liste der IHK hatte ich bereits, via CSV oder JSON übernehmen kann. Da die Liste als PDF vorlag, hab ich ChatGPT gebeten, mir daraus eine Liste im erwarteten Format zu erstellen. Das klappte auch erstaunlich gut, so dass ich schnell alle meine Kontakte in Listmonk hatte.

Mailingliste erstellen 📃

Alle Kontakte habe ich dann zu einer Liste hinzugefügt, die angeschrieben werden sollte. Hier kann man dann auch noch weitere (bestehende Kontakte hinzufügen) und/oder filtern. Aktuell brauche ich alle. Du könntest darüber aber auch z.B. ein Mailing an nur bestimmte Leute aus deiner Umgebung erstellen (wenn diese Daten in Listmonk vorliegen).

Mailvorlage erstellen ✉️

Ich habe mir für meine privaten Mails eine Vorlage erstellt, die keinerlei CI (corporate identity) besitzt:

Hiermit könntest du aber eine generelle Vorlage erstellen, die der CI deines Unternehmens oder deinem Geschmack entspricht und darüber dann ein einheitliches Aussehgen schaffen. Der Inhalt der Kampagnen wird dann in die Vorlage hineingeschrieben.

Damit ich aus sehe wer die Mail geöffnet hat, habe ich auch einen Tracking-View eingebaut, im Prinzip wie eine Lesebestätigung.

Kampagne erstellen 🎺

Alles mündet dann in den Kampagnen. Eine Kampagne besitzt immer eine Liste von n-Kontakten, eine Vorlage und einen entsprechenden Inhalt. Mein Mailinhalt sah dann so aus:

Wie du siehst, ist hier die Anrede variabel, das heißt, dass dieser Platzhalter für jede Mail und für jeden Kontakt ersetzt wird. Listmonk bietet noch eine Vielzahl an weiteren Variablen an:

Templating - listmonk / Documentation

Diese Kampagne konnte ich dann an alle Leute aus der Liste versenden und sogar noch Anhänge beifügen und CC/BCC-Empfänger.

Die Relationen zwischen den einzelnen Objekten sehen so aus:

Fazit ☝️

Wie du siehst, kann dir ein Newsletter-System, wenn es geschickt genutzt wird, auch bei solchen Dingen helfen. Die Installation hat mich ca. 20 Minuten gekostet und ich musste die Mail nur einmal schreiben. Zusammen mit ChatGPT konnte ich die vorliegende PDF-Liste schnell nach CSV konvertieren und hab so eine große Zahl an Mails komplett automatisiert abgearbeitet. Man muss nicht noch mehr Arbeit haben als man sowieso schon hat.

Das schöne an Listmonk ist auch, dass es eine API anbietet. So könnte man darüber auch automatisiert Dinge erledigen lassen. Zusammen mit n8n könnte man so auch seine Abonnenten aus dem Blog darin importieren und darüber dann Mails versenden. Eigentlich ziemlich cool oder?