Ghost CMS: Newsletter ohne Mailgun versenden (SMTP)
Ghost CMS bietet nur die Möglichkeit, über Mailgun den Newsletter zu versenden. Dies ist für kleinere Blogger ein Dorn im Auge. Stelle dein Ghost nun selber um und versende deinen Newsletter ohne Mailgun!
Einleitung
Ghost als Content Management System ist ein sehr beliebtes Blog-System und bietet jedem eine große Auswahl an Features.
In der Self Hosted Variante kann ebenso ein Newsletter-Versand aufgebaut werden. Dieser Feature gibt es auch in der Ghost Pro Version. Bei der Self Hosted Variante ist es aber leider so, dass dafür Mailgun benötigt wird. Grade für kleine oder Hobby-Blogger verursacht dies kosten, die man nur mit Bauchschmerzen in kauf nimmt.
Der Entwickler este-linux hatte das selbe Problem und kam auf die Idee, einen Service zu bauen der Mailgun ersetzt und lokal genutzt werden kann.
Als Lösungsansatz hat er einen Projekt namens LibreMailApi veröffentlicht. Dieses Projekt basiert mit auf den Open Source Programmen: Guzzle HTTP client, PHPMailer und noch einigen weiteren.
In der Self Hosted Variante kann dies direkt auf dem Server installiert werden und mit Ghost verbunden werden.
Installation von LibreMailApi
Die gesamte API Struktur basiert auf PHP zusammen mit Guzzle. Das Projekt wird über den Composer von PHP installiert und kann darüber auch gestartet werden.
Installation von PHP & Composer
Zunächst wird PHP benötigt, damit der Composer installiert werden kann. Der Composer sowie auch PHP werden über die CLI von dem Server installiert. Am besten schaltet man sich über einen SSH Client auf dem Server auf.
apt install curl php php-xml php-cli php-mbstring git unzip -y

Nun kann der Composer direkt auf der eigenen Website runtergeladen und installiert werden. Die Installation erflogt direkt über PHP und es können noch weitere Einstellungsmöglichkeiten vorgenommen werden.
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
Bei diesem Ausschnitt wird der Composer in dem Verzeichnis /usr/local/bin/
installiert mit dem Namen composer
. Dadurch lässt sich der Composer direkt auf der Bash mit dem Befehl composer
ausführen.

LibreMailApi installieren & Konfigurieren
Das Projekt LibreMailApi ist von este-linux auf Codeberg.org veröffentlicht worden. Dies ist ein Git-System und erlaubt es uns das Repository direkt aus dem Git herunterzuladen.
Zum beziehen des Git-Repositorys wird der git clone
Befehl auf der Console genutzt. Dieser lädt das Git Prjekt runter und entpackt es in ein Verzeichnis.
git clone https://codeberg.org/este-linux/libre-mail-api.git
Nun hat man das Verzeichnis in dem Verzeichnis, wo man diesen Befehl ausgeführt hat.

Da es hier aktuell im Home-Verzeichnis des Root-Users liegt wird es noch in das Stammverzeichnis verschoben. Dabei wird es auch gleich umbenannt.
mv libre-mail-api /libremail

Nun wandert man in das Verzeichnis von LibreMailApi.
cd /libremail
Hier startet man den Installationsporzess über den Composer.
composer install

Bei der Installation werden alle genutzten Programme einmal angezeigt die mit dem Composer bereitgestellt werden. Dieser Schritt ist sehr wichtig, da sonst einige Quellen vom LibreMailApi genutzt werden können und es kommt in der Ausführung zu Fehlern.
LibreMailApi konfigurieren
Bei LibreMailApi gibt es eine zentrale Konfigurationsdatei. Nach dem Herunterlanden und installieren ist diese aber nur als Beispiel Datei vorhanden und muss noch umbenannt oder kopiert werden. Dies Dateien findet man im Stammverzeichnis von LibreMailApi unter dem Verzeichnis config/
.
Zunächst kopiert man die Beispiel Konfigurationsdatei und benennt diese dabei um:
cp config/config.example.php config/config.php

Nun muss noch alles auf den SMTP Host angepasst werden und eine eigene Domain vergeben werden. Dafür öffnet man die eben erstellte Konfigurationsdatei und bearbeitet folgende Abschnitte:
nano config/config.php
Der API Abschnitt muss auf die eigene Domain abgestimmt werden und es sollte ein eigener API-Key vergeben werden. Der API Benutzer soll auch api
belassen werden. Diesen benutzt Ghost später selbstständig.
'api' => [
'base_url' => 'http://localhost:8080',
'version' => 'v3',
'default_domain' => 'sandbox.libremailapi.org',
'auth' => [
'username' => 'api',
'password' => 'key-test123456789'
]
],
'storage' => [
'path' => __DIR__ . '/../storage',
'retention_days' => 30
],
'limits' => [
'max_recipients' => 1000,
'max_attachment_size' => 25 * 1024 * 1024, // 25MB
'max_message_size' => 25 * 1024 * 1024
],
'features' => [
'tracking' => true,
'dkim' => true,
'testmode' => true,
'templates' => true
],
'logging' => [
'enabled' => true,
'level' => 'info',
'file' => __DIR__ . '/../logs/libre-mail-api.log'
],
Der Rest des Abschnitts kann so belassen werden. Wichtig für Ghost ist die Base-URL, die Default Domain und der API-Key, welcher hier als Passwort angegeben ist.
Beim Abschnitt logging
sieht man einen Pfad, wo die Log-Datei abgelegt wird. Diese ist für das Debugging später wichtig.

Damit auch über SMTP nun der Newsletter versendet werden kann muss im unteren Teil der Konfigurationsdatei die SMTP Konfiguration angepasst werden.
Es werden direkt am Ende der Dateien hierfür Beispiele geliefert, wie die Konfiguration aussehen könnte.
'smtp' => [
// Set to true to actually send emails via SMTP
'enabled' => false,
// SMTP server settings
'host' => 'smtp.gmail.com', // SMTP server hostname
'port' => 587, // SMTP port (587 for TLS, 465 for SSL, 25 for plain)
'encryption' => 'tls', // 'tls', 'ssl', or null for no encryption
// Authentication
'auth' => true, // Enable SMTP authentication
'username' => 'your-email@gmail.com', // SMTP username (email address)
'password' => 'your-app-password', // SMTP password or app password
// Default sender information (used when not specified in message)
'from_name' => 'LibreMailApi',
'from_email' => 'your-email@gmail.com',
// Connection settings
'timeout' => 30, // Connection timeout in seconds
'debug' => false, // Enable SMTP debug output (for troubleshooting)
// SSL/TLS settings
'verify_peer' => true, // Verify SSL certificate
'allow_self_signed' => false // Allow self-signed certificates
]
Direkt am Anfang muss der Parameter enable
auf true
gestellt werden, ansonsten werden keine E-Mails zu dem SMTP-Host geschickt.
Danach wird der Hostname, sowie der Port und die Verschlüsslung angepasst. Es empfiehlt sich immer E-Mails nur über eine Verschlüsslung wie TLS zu versenden.
Jetzt folgt noch die Benutzerauthentifizierung. Hier Trägt man seinen Benutzer oder die E-Mail Adresse ein gefolgt von dem Passwort.
Sollte man nicht signierte Zertifikate benutzen kann am Ende des Abschnittest die Überprüfung abgeschaltet werden. Dafür Tauscht man 'verify_peer' => true
zu false
und 'allow_self_signed' => false
zu true
.

Der aktuelle Stand wird gesichert mit STRG+X und damit auch direkt geschlossen.
LibreMailApi starten
LibreMailApi ist nun soweit vorbereitet, dass es gestartet werden kann, dafür wird der composer start
Befehl ausgeführt.
composer start
Dies geht nur im Stammverzeichnis von LibreMailApi (/libremail
).

Sobald der Composer LibreMailApi gestartet hat, sieht man die Ausgabe in der Console. Hier werden dann auch alle Statten angezeigt ob der Server angefragt wurde und die Anfrage bearbeitet wurde.
Test-E-Mail mit LibreMailApi versenden
Bevor man sich wundert, dass noch nichts geht, sollte man den Service einmal testen. Dafür bietet LibreMailApi ein eigenes Tool:
php examples/test_smtp.php your-email@example.com
Hier wird die E-Mail angegeben an die eine Test-E-Mail gesendet werden soll und es wird der Log mit ausgegeben.

In diesem Beispiel hat das nicht geklappt. Daher bietet es sich nun an die LOG´s zu prüfen.
cat logs/libre-mail-api.log

Die Logs besagen nun, dass der SMTP Host nicht erreichbar ist. In diesem Fall muss geprüft werden, woher das kommt.
Systemd Service einrichten
Damit man nun nicht jedes mal LibreMailAPI starten muss, erstellt man einen Systemd Service der diese Aufgabe übernimmt.
Dafür erstellt man diese Datei:
nano /etc/systemd/system/libre-mail.service
und fügt folgenden Code ein:
[Unit]
Description=Start LibreMailApi
After=network.target
[Service]
Type=simple
WorkingDirectory=/libre-mail-api
ExecStart=/usr/bin/php -S 0.0.0.0:8080 index.php
User=root
Restart=always
[Install]
WantedBy=multi-user.target
Dieser simple Service startet über php den Server auf Port 8080
im Verzeichnis /libre-mail-api
.
Damit der Service funktioniert muss der Systemd-Daemon neu geladen werden und der Service gestartet und aktiviert werden.
systemctl daemon-reload
systemctl enable libre-mail.service
systemctl start libre-mail.service
Ghost vorbereiten
Damit Ghost nun auch den Newsletter über LibreMailApi versenden kann muss über die Console noch drei befehle ausgeführt werden.
Man navigiert erst in das Verzeichnis des Ghost Blogs wo auch die Ghost-CLI installiert wurde und gibt nun folgende Befehle ein:
ghost config bulkEmail.mailgun.apiKey <PASSWORT vom APi Benutzer>
ghost config bulkEmail.mailgun.domain <LIBREMAILAPI DOMAIN>
ghost config bulkEmail.mailgun.baseUrl http://localhost/v3
Hier müssen die eigenen Daten angegeben werden, damit Ghost auch nun den Server anspricht.
Danach wird nur die Ghost Instanz neu gestartet und es kann losgehen mit dem eigenen Newsletter!
Das könnte dich interessieren!