Dieses Tutorial zeigt Ihnen, wie Sie Mailtrain auf einem Ubuntu 16.04-Server installieren. Mailtrain ist eine selbst gehostete Open-Source-Newsletter-App, eine Alternative zu kommerziellen E-Mail-Dienstanbietern wie Mailchimp. Sie können Mailtrain verwenden, um E-Mails über Ihren eigenen E-Mail-Server oder einen beliebigen SMTP-Relay-Dienst (Mailjet, SendGrid, AmazonSES, Mailgun usw.) an Ihre E-Mail-Abonnenten zu senden.
Mailtrain wird unter den Bedingungen der GPL v3.0-Lizenz veröffentlicht, die auf Node.js und MySQL/MariaDB basiert. Die neueste Version ist v1.24.1, veröffentlicht am 28. September 2018. Funktionen von Mailtrain sind wie folgt:
- Es ermöglicht Ihnen die einfache Verwaltung großer Mailinglisten (z. B. 1 Million Abonnenten).
- Sie können Abonnenten manuell über die API hinzufügen oder aus einer CSV-Datei importieren.
- Es unterstützt benutzerdefinierte Felder (Textfelder, Zahlen, Dropdown-Menüs oder Kontrollkästchen), Merge-Tags und benutzerdefinierte Formulare.
- Listensegmentierung.
- RSS-Kampagne:Newsletter automatisch aus RSS-Feed generieren und an Abonnenten senden.
- Abonnenten können ihre öffentlichen GPG-Schlüssel hochladen und Mailtrain verschlüsselt den Newsletter für sie.
- Ermöglicht es Ihnen, individuelle Klickstatistiken für jeden Link zu überprüfen.
- Erweiterte Editoren für E-Mail-Vorlagen und HTML-Code-Editor.
- Automatisierung:Senden Sie bestimmte E-Mails, wenn der Benutzer Ihren vordefinierten Auslöser aktiviert.
- Sie können eine offene E-Mail-Liste (öffentliche Anmeldung zulassen) und eine geschlossene E-Mail-Liste erstellen (Abonnenten werden der Liste vom Administrator hinzugefügt).
Voraussetzungen für die Installation von Mailtrain auf Ubuntu 16.04 Server
Um Mailtrain auszuführen, benötigen Sie einen Server mit mindestens 1 GB RAM. Sie können auf diesen speziellen Link klicken, um 100 $ kostenloses Guthaben auf DigitalOcean zu erhalten. (Nur für neue Benutzer). Wenn Sie bereits DigitalOcean-Benutzer sind, können Sie auf diesen speziellen Link klicken, um ein kostenloses Guthaben von 50 $ für Vultr zu erhalten (nur für neue Benutzer). Sobald Sie ein Konto bei DigitalOcean oder Vultr haben, installieren Sie Ubuntu 16.04 auf Ihrem Server und folgen Sie den Anweisungen unten.
Sie müssen auch einen Domänennamen haben. Ich habe meinen Domainnamen bei NameCheap registriert, weil der Preis niedrig ist und sie Whois-Datenschutz kostenlos bieten.
Schritt 1:MariaDB-Datenbankserver installieren
Ihre Abonnentendaten werden in einer Datenbank gespeichert. Mailtrain unterstützt MySQL und MariaDB. MariaDB ist ein Drop-in-Ersatz für MySQL. Es wurde von ehemaligen Mitgliedern des MySQL-Teams entwickelt, die befürchten, dass Oracle MySQL in ein Closed-Source-Produkt verwandeln könnte. Lassen Sie uns also den MariaDB-Datenbankserver installieren.
Geben Sie den folgenden Befehl ein, um es unter Ubuntu 16.04 zu installieren.
sudo apt install mariadb-server mariadb-client
Nach der Installation sollte der MariaDB-Server automatisch gestartet werden. Verwenden Sie systemctl um seinen Status zu überprüfen.
systemctl status mysql
Beispielausgabe:
● mariadb.service - MariaDB 10.1.34 Datenbankserver Geladen:geladen (/lib/systemd/system/mariadb.service; aktiviert; Herstellervoreinstellung:aktiviert) Aktiv:aktiv (läuft) seit Sa 2018-09-08 11 :13:27 UTC; vor 21s Docs:man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Haupt-PID:3473 (mysqld) Status:„Nehmen Sie jetzt Ihre SQL-Anfragen entgegen …“ Aufgaben:27 (limit :505) CGroup:/system.slice/mariadb.service └─3473 /usr/sbin/mysqld
Wenn es nicht läuft, starten Sie es mit diesem Befehl:
sudo systemctl mysql starten
Damit MariaDB beim Systemstart automatisch startet, führen Sie
aussudo systemctl enable mysql
Führen Sie nun das Sicherheitsskript nach der Installation aus.
sudo mysql_secure_installation
Wenn Sie aufgefordert werden, das MariaDB-Root-Passwort einzugeben, drücken Sie die Eingabetaste, da das Root-Passwort noch nicht festgelegt ist. Geben Sie dann y
ein um das Root-Passwort für den MariaDB-Server festzulegen.
Als nächstes können Sie die Eingabetaste drücken, um alle verbleibenden Fragen zu beantworten, wodurch der anonyme Benutzer entfernt, die Remote-Root-Anmeldung deaktiviert und die Testdatenbank entfernt wird. Dieser Schritt ist eine Grundvoraussetzung für die MariaDB-Datenbanksicherheit. (Beachten Sie, dass der Buchstabe Y
wird groß geschrieben, was bedeutet, dass es die Standardantwort ist.)
Schritt 2:Erstellen Sie eine Datenbank und einen Benutzer für Mailtrain
Jetzt müssen wir uns bei der MariaDB-Konsole anmelden und eine Datenbank und einen Benutzer für Mailtrain erstellen. Standardmäßig verwendet das MaraiDB-Paket auf Ubuntu unix_socket um die Benutzeranmeldung zu authentifizieren, was im Grunde bedeutet, dass Sie den Benutzernamen und das Passwort des Betriebssystems verwenden können, um sich bei der MariaDB-Konsole anzumelden. Sie können also den folgenden Befehl ausführen, um sich anzumelden, ohne das MariaDB-Root-Passwort anzugeben.
sudo mysql -u root
Erstellen Sie mit dem folgenden Befehl eine Datenbank für Mailtrain. Ich habe es mailtrain
genannt , aber Sie können einen beliebigen Namen verwenden. (Lassen Sie das Semikolon nicht aus.)
Datenbank-Mailtrain erstellen;
Geben Sie dann den folgenden Befehl ein, um einen Datenbankbenutzer für Mailtrain zu erstellen und dem Benutzer alle Berechtigungen der Mailtrain-Datenbank zu gewähren. Ersetzen Sie mtuser
und your-password
mit Ihrem bevorzugten Benutzernamen und Passwort.
gewähren Sie alle Privilegien auf mailtrain.* an mtuser@localhost, identifiziert durch 'mtuser_password';
Erstellen Sie als Nächstes einen Benutzer mit Nur-Lese-Zugriff auf die Mailtrain-Datenbank. Ich habe diesen Benutzer mt_readonly
genannt .
grant select on mailtrain.* TO mt_readonly@localhost identifiziert durch 'mt_readonly_password';
Leeren Sie die Berechtigungstabelle, damit die Änderungen wirksam werden, und verlassen Sie dann die MariaDB-Konsole.
Privilegien leeren;exit;
Schritt 3:Node.js installieren
Mailtrain basiert auf Node.js, einer JavaScript-Laufzeitumgebung, die von Menschen lesbaren JavaScript-Code in Maschinencode übersetzt. Wir müssen also Node.js auf Ubuntu 16.04 installieren, um Mailtrain auszuführen. Mailtrain erfordert Node.js 7+. Dieses Tutorial installiert die aktuelle LTS-Version von Node.js (V8.x) aus dem NodeSource-Repository.
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -sudo apt install -y nodejs
Die nodejs
Paket enthält die npm-Binärdatei (Node.js-Paketmanager), sodass Sie sie nicht separat installieren müssen. Um Ihre Version von Node.js und npm zu überprüfen, führen Sie
Knoten -vnpm -v
Ausgabe:
Um native Addons von npm zu kompilieren und zu installieren, müssen Sie auch Build-Tools installieren:
sudo apt install -y build-essential
Schritt 4:Mailtrain ausführen
Gehen Sie zu /var/www/
und Mailtrain-Dateien von Github abrufen.
cd /var/www/sudo git clone https://github.com/Mailtrain-org/mailtrain.git
Importieren Sie die anfänglichen SQL-Daten in die Mailtrain-Datenbank, indem Sie den folgenden Befehl verwenden. Sie müssen das Passwort von mtuser
eingeben .
mysql -u mtuser -p mailtrainErstellen Sie die Konfigurationsdatei production.toml.
sudo nano /var/www/mailtrain/config/production.tomlIn dieser Datei können Sie Konfigurationen hinzufügen, die die Standardkonfigurationen in
/var/www/mailtrain/config/default.toml
überschreiben Datei. Wir müssen nur die folgenden Konfigurationen hinzufügen.user="mailtrain"group="mailtrain"[log]level="error"[www]secret="Ersetzen Sie dies durch zufällige Zeichen"[mysql]user="mtuser"password="mtuser_password"[queue] Prozesse=5Speichern und schließen Sie die Datei. Erstellen Sie dann den
mailtrain
Benutzer und Gruppe, unter der der Mailtrain-Daemon ausgeführt werden soll. Beachten Sie, dass wir für diesen Benutzer kein Passwort erstellen müssen, also erstellen wir einen Systembenutzer anstelle eines normalen Benutzers.sudo adduser --system --group mailtrainErstellen Sie eine Konfigurationsdatei für den Report Worker.
sudo nano /var/www/mailtrain/workers/reports/config/production.tomlFügen Sie die folgenden Konfigurationen hinzu. Dieser Report Worker hat nur Lesezugriff auf die Mailtrain-Datenbank.
[log]level="error"[mysql]user="mt_readonly"password="mt_readonly_password"Speichern und schließen Sie die Datei. Ändern Sie dann die Berechtigung von
/var/www/mailtrain/
.sudo chown mailtrain:mailtrain /var/www/mailtrain/ -Rsudo chmod o-rwx /var/www/mailtrain/config/Und installieren Sie die erforderlichen Knotenpakete.
cd /var/www/mailtrainsudo npm install --no-progress --production --unsafe-perm=trueKopieren Sie die systemd-Service-Unit-Datei nach
/etc/systemd/system/
Verzeichnis.sudo cp /var/www/mailtrain/setup/mailtrain.service /etc/systemd/system/Öffnen Sie diese Datei.
sudo nano /etc/systemd/system/mailtrain.serviceWeil wir Mailtrain nach
/var/www/mailtrain/
heruntergeladen haben Verzeichnis, ändern Sie also das Arbeitsverzeichnis von/opt/mailtrain
nach/var/www/mailtrain
. Speichern und schließen Sie diese Datei. Starten Sie dannmailtrain.service
.sudo systemctl start mailtrain.serviceAutostart beim Systemstart aktivieren.
sudo systemctl enable mailtrain.serviceÜberprüfen Sie seinen Status. Stellen Sie sicher, dass es läuft. Wenn die Ausgabe aktiviert (automatischer Neustart) anzeigt, warten Sie einfach einen Moment, bis Mailtrain gestartet wird.
sudo systemctl status mailtrain.serviceJetzt, da Mailtrain ausgeführt wird, können Sie über Port 3000 auf die Mailtrain-Weboberfläche zugreifen.
Ihr-Server-IP:3000
Reverse Proxy einrichten und HTTPS aktivieren
Bevor Sie das Mailtrain-Webinterface verwenden, lassen Sie es uns hinter Nginx platzieren und dann HTTPS aktivieren. Installieren Sie den Nginx-Webserver unter Ubuntu 16.04 mit:
sudo apt install nginxNun können Sie das Beispiel
mailtrain-nginx.conf
kopieren Datei nach/etc/nginx/conf.d/
Verzeichnis.sudo cp /var/www/mailtrain/setup/mailtrain-nginx.conf /etc/nginx/conf.d/Öffnen Sie diese Datei.
sudo nano /etc/nginx/conf.d/mailtrain-nginx.confSuchen Sie die folgende Zeile.
Servername mailtrain.org www.mailtrain.org;Ändern Sie den Wert von
server_name
Parameter zu Ihrem eigenen Domainnamen wienewsletter.your-domain.com
. Vergessen Sie nicht, einen A-Eintrag für diese Subdomain zu erstellen.Servername newsletter.linuxbabe.com;Speichern und schließen Sie die Datei. Testen Sie dann die Nginx-Konfigurationen.
sudo nginx -tWenn der Test erfolgreich ist, laden Sie Nginx neu, damit die Änderungen wirksam werden.
sudo systemctl reload nginxSie sollten jetzt über Ihre Subdomain auf die Mailtrain-Weboberfläche zugreifen können:
newsletter.your-domain.com
.Bearbeiten Sie nun
/var/www/mailtrain/config/production.toml
Datei.sudo nano /var/www/mailtrain/config/production.tomlIm
[www]
Abschnitt, fügen Sie die folgenden zwei Zeilen hinzu, um anzugeben, dass sich Mailtrain hinter dem Nginx-Proxy befindet, und lassen Sie ihn nur an der lokalen Hostadresse lauschen.host="127.0.0.1"proxy=trueSpeichern und schließen Sie die Datei. Starten Sie dann Mailtrain neu, damit die Änderung wirksam wird.
sudo systemctl mailtrain neu startenHTTPS mit Let’s Encrypt aktivieren
Installieren Sie den Let’s Encrypt-Client (certbot) auf Ihrem Ubuntu 16.04-Server.
sudo apt install software-properties-commonsudo add-apt-repository ppa:certbot/certbotsudo apt updatesudo apt install certbot python3-certbot-nginxDann können Sie das Nginx-Plugin verwenden, um automatisch ein TLS-Zertifikat zu erhalten und zu installieren, indem Sie den folgenden Befehl ausführen.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email your-email-address -d newsletter.your-domain.com
Jetzt können Sie über Ihren Domainnamen und eine sichere HTTPS-Verbindung auf die Mailtrain-Weboberfläche zugreifen.
Melden Sie sich mit dem Benutzernamen
Hinweis:Das Admin-Konto ist ein leichtes Ziel für Hacker. Für beste Sicherheit wird empfohlen, dass Sie den Benutzernamen vonadmin
an und Passworttest
. Ändern Sie dann die E-Mail-Adresse und das Passwort Ihres Kontos. Gehen Sie zusettings
Seite, um die Standardkonfigurationen zu ändern. Sie sollten die Dienstadresse vonhttp://localhost:3000/
ändern zu Ihrer Subdomain (https://newsletter.your-domain.com
).admin
ändern zu etwas anderem. Die Mailtrain-Weboberfläche bietet keine solche Option, aber Sie können den Benutzernamen in der MariaDB-Datenbank mit dem SQL-Befehl ändern.In den
Mailer Settings
, können Sie SMTP verwenden, wenn Sie einen eigenen E-Mail-Server haben, oder Amazon SES verwenden. Tatsächlich können Sie auch andere SMTP-Relay-Dienste imSMTP
verwenden Tab. Im folgenden Screenshot verwende ich meinen eigenen E-Mail-Server. E-Mails werden auf Port 587 mit STARTTLS-Verschlüsselung übermittelt.
Speichern Sie Ihre Einstellungen. Dann können Sie eine Liste erstellen, um die Funktionalitäten von Mailtrain zu testen.
Umgang mit Bounce-Nachrichten in Mailtrain
Früher oder später wird Ihre E-Mail-Liste Adressen enthalten, an die Sie keine E-Mails senden können. Wenn beispielsweise ein Abonnent, der eine Firmen-E-Mail-Adresse verwendet, das Unternehmen verlässt, wird diese E-Mail-Adresse gelöscht. Ihr E-Mail-Server erhält also eine Bounce-Nachricht, die besagt, dass die E-Mail nicht zugestellt werden kann.
Wenn Sie zum Senden von E-Mails einen SMTP-Relay-Dienst verwenden, werden diese Bounce-Nachrichten für Sie verarbeiten. Wenn Sie Ihren eigenen E-Mail-Server zum Senden von E-Mails verwenden, müssen Sie Bounce-Nachrichten in Mailtrain verarbeiten. Mailtrain bietet zwei Möglichkeiten zum Umgang mit unzustellbaren Nachrichten.
- über VERP
- über das Postfix-Protokoll
Ich persönlich verwende die VERP-Methode, weil sie in der E-Mail-Community weit verbreitet ist und auch, weil die zweite Methode eine hohe CPU-Auslastung auf meinem Server verursacht.
VERP-Bounce-Handhabung
Mit VERP (Variable Envelope Return Path) verwendet Ihr E-Mail-Listenmanager eindeutige Envelope-Adressen für jeden Abonnenten. Um VERP zu aktivieren, bearbeiten Sie production.toml
Datei.
sudo nano /var/www/mailtrain/config/production.toml
Wenn auf Ihrem Mailtrain-Host kein SMTP-Server läuft, fügen Sie den folgenden Text hinzu.
[verp]enabled=trueport=25disablesenderheader=true
Wenn auf Ihrem Mailtrain-Server ein SMTP-Server wie Postfix ausgeführt wird, fügen Sie den folgenden Text hinzu. Der Bounce-Handling-Server lauscht auf 127.0.0.1:2525
.
[verp] enabled=true port=2525 host="127.0.0.1"disablesenderheader=true
Speichern und schließen Sie die Datei. Starten Sie dann Mailtrain neu, damit die Änderungen wirksam werden.
sudo systemctl mailtrain neu starten
Gehen Sie in der Mailtrain-Weboberfläche zu settings
-> VERP Bounce Handlding
. Aktivieren Sie Use VERP to catch bounces
. Speichern Sie Ihre Einstellungen.
Als nächstes müssen Sie einen MX-Eintrag für den Server-Hostnamen erstellen (bounces.your-domain.com
), fügen Sie dann einen Eintrag für diesen Hostnamen hinzu, der auf Ihren Mailtrain-Host verweist, sodass Bounce-Nachrichten an Ihren Mailtrain-Host gesendet werden können. Jeder Abonnent in Ihrer Liste hat eine eindeutige Envelope-Adresse wie [email protected]
.
Beachten Sie, dass, wenn Sie einen DMARC-Eintrag für Ihren Domänennamen bereitgestellt haben, die SPF-Ausrichtung auf den entspannten Modus eingestellt werden muss. Wenn der strenge Modus eingestellt ist, könnte Ihr Newsletter die DMARC-Prüfung nicht bestehen.
Wenn der Bounce-Handling-Server von Mailtrain auf Port 2525 von 127.0.0.1 und der Postfix-SMTP-Server auf Port 25 der öffentlichen IP-Adresse lauscht, müssen Sie eine Transportkarte einrichten, damit Postfix die Bounce-Nachricht an Mailtrain weiterleiten kann. Erstellen Sie die Transportzuordnungsdatei.
sudo nano /etc/postfix/transport
Fügen Sie dieser Datei die folgende Zeile hinzu. Dies weist Postfix an, E-Mails mit Adressen wie [email protected]
weiterzuleiten an den Bounce-Handling-Server von Mailtrain.
bounces.ihre-domain.com smtp:[127.0.0.1]:2525
Speichern und schließen Sie die Datei. Generieren Sie dann die Indexdatei.
sudo postmap /etc/postfix/transport
Postfix-Hauptkonfigurationsdatei bearbeiten.
sudo nano /etc/postfix/main.cf
Fügen Sie der Datei die folgende Zeile hinzu.
transport_maps =hash:/etc/postfix/transport
Speichern und schließen Sie die Datei. Starten Sie dann Postfix neu, damit die Änderung wirksam wird.
sudo systemctl reset postfix
Cron-Job zum automatischen Bereinigen von nicht abonnierten E-Mail-Adressen
Sie können abgemeldete E-Mail-Adressen im webbasierten Admin-Panel von Mailtrain manuell löschen, aber es ist viel effizienter, sie mit MySQL/MariaDB-Befehlen zu löschen, dann erstellen Sie einfach einen Cron-Job, um diese Aufgabe zu automatisieren.
Melden Sie sich zuerst beim MySQL/MariaDB-Datenbankserver an.
sudo mysql -u root
Verbinden Sie sich dann mit der Mailtrain-Datenbank.
mailtrain verwenden;
Die Informationen der Abonnenten werden im subscription
gespeichert Tische. Wenn Sie mehrere Mailinglisten haben, dann haben Sie mehrere subscription
Tische. Sie können alle diese Tabellen mit dem folgenden SQL-Befehl auflisten.
zeige Tabellen wie 'subscription%';
Ausgabe auf meinem Server.
+-------------------------------------+| Tables_in_mailtrain (Abonnement %) |+------------------------------------+| Abonnement || Abonnement__1 || Abonnement__2 |+-------------------------------------+
Die erste Tabelle ist eine leere Tabelle. Ich habe zwei Listen in Mailtrain. Sie werden in subscription__1
gespeichert und subscription__2
Tisch. Bei abonnierten E-Mail-Adressen ist der Statuscode auf 1
gesetzt . Abgemeldete E-Mail-Adressen haben den Statuscode auf 2
gesetzt . Um also abgemeldete E-Mail-Adressen zu löschen, können Sie die folgenden SQL-Befehle ausführen.
VON Abonnement LÖSCHEN__1 wobei Status ='2';VON Abonnement LÖSCHEN__2 Wo Status ='2';
Um den MySQL/MariaDB-Datenbankserver zu beenden, führen Sie
ausBeenden;
Öffnen Sie nun die Crontab-Datei des Root-Benutzers.
sudo crontab -e
Fügen Sie die folgenden zwei Zeilen hinzu.
# Abgemeldete E-Mail-Adressen aus der Mailingliste löschen daily@daily /usr/bin/mysql -u root mailtrain -Bse "VON Abonnement LÖSCHEN__1 where status ='2';FROM Abonnement LÖSCHEN__2 where status ='2';"Speichern und schließen Sie die Datei. Und fertig.
Umgang mit böswilliger Anmeldung
Es gibt Leute, die nichts zu tun haben, außer eine gefälschte E-Mail-Adresse zu verwenden, um sich für Ihre E-Mail-Liste anzumelden, sodass die Anmeldebestätigungs-E-Mail an eine gefälschte E-Mail-Adresse gesendet wird und Sie möglicherweise einen Bericht über eine nicht zugestellte E-Mail in Ihrem Posteingang erhalten. P>
Sie können Ihren Webmailer wie Roundcube verwenden, um einen Filter zu erstellen, der diese Art von E-Mail-Nachricht automatisch löscht. Im folgenden Screenshot sehen Sie, dass ich einen Filter erstellt habe, der automatisch eine Nachricht löscht, wenn
- Der Betreff enthält „Nicht zugestellte E-Mail an Absender zurückgesendet“
- Der Bericht über nicht zugestellte Nachrichten wird an meine Adresse gesendet.
- Der Textkörper enthält „Bitte Abonnement bestätigen“. (Weil die Anmeldebestätigungs-E-Mail diesen Satz enthält.)