Das Testen von E-Mails in einer lokalen Entwicklungsumgebung kann eine Herausforderung sein. Es ist eine echte Qual, zu wissen, ob die ausgehenden E-Mails deiner Webseite oder Web-App tatsächlich den Posteingang des Empfängers erreichen. Hier kommt MailHog ins Spiel!
MailHog ist ein Werkzeug zum Testen von E-Mails, das es super einfach macht, einen lokalen E-Mail-Server zu installieren und zu konfigurieren. MailHog richtet einen gefälschten SMTP-Server ein. Du kannst deine bevorzugten Webanwendungen so konfigurieren, dass sie den SMTP-Server von MailHog zum Senden und Empfangen von E-Mails nutzen.
Zum Beispiel kannst du eine lokale WordPress-Seite so konfigurieren, dass sie MailHog für den E-Mail-Versand nutzt. Das ist genau das, was DevKinsta tut, um seinen eingebauten SMTP-Server zum Testen von E-Mails lokal zu betreiben.
In diesem Artikel erfährst du alles über die Installation und Konfiguration von MailHog, wie du E-Mails lokal testen kannst und vieles mehr!
Bereit zum Loslegen? Los geht’s!
Willst du lieber die Videoversion sehen?
Was ist MailHog?
MailHog ist ein Open Source Werkzeug zum Testen von E-Mails, das sich vor allem an Entwickler richtet. Es ermöglicht dir, den E-Mail-Versand und -empfang deiner Web-Apps effizienter zu testen.
MailHog wurde mit der Go Programmiersprache entwickelt und kann auf verschiedenen Betriebssystemen ausgeführt werden, darunter Windows, Linux, FreeBSD und macOS. MailHog wird von Ian Kent gepflegt und unter der MIT-Lizenz veröffentlicht, so dass du es für private und kommerzielle Zwecke frei einsetzen kannst.
Aber warum brauchst du MailHog in erster Linie überhaupt?
Warum du MailHog brauchst
MailHog löst viele der Hauptprobleme von E-Mail-Tests.
Angenommen, du entwickelst eine WordPress Webseite in einer lokalen Entwicklungsumgebung. Wenn du ein Kontaktformular oder eine andere ausgehende E-Mail testen willst, kann das eine unangenehme Aufgabe sein.
Normalerweise kümmert sich der Standard-SMTP-Server der Webanwendung um diese Aufgabe. In einer lokalen Entwicklungsumgebung funktioniert das aus verschiedenen Gründen fast immer nicht.
Du kannst unsere ausführliche Anleitung über freie SMTP-Server lesen, um mehr darüber zu erfahren, wie ein SMTP-Server funktioniert.
Zuerst musst du dein Betriebssystem, deinen Webserver und deine Web-App einrichten, um E-Mails in einer lokalen Umgebung zu ermöglichen. Dann musst du sicherstellen, dass die E-Mails erfolgreich im Posteingang des Empfängers ankommen, was darin enden kann, dass du deine Zeit (und den Platz im Posteingang) verschwendest.
Und dann ist da noch das Problem, eine echte E-Mail-Adresse für Tests zu verwenden. Das kann der Glaubwürdigkeit deiner privaten E-Mail schaden.
MailHog löst all die oben genannten Probleme. Es richtet einen gefälschten SMTP-Server ein, den du in deiner Webanwendung zum Senden und Empfangen von E-Mails einrichten kannst. Es speichert sogar die gesendeten und empfangenen E-Mails in einem schicken Web-UI, so dass du sie wie in einem echten E-Mail-Posteingang durchsehen kannst.
Zu guter Letzt kannst du mit MaiilHog diese E-Mails auch über eine API für automatisierte Tests abrufen. Das ist ein leistungsfähiges Feature; wie du die API nutzt, bleibt dir überlassen.
MailHog Features
MailHog ist mit vielen Funktionen von Haus aus ausgestattet. Hier sind einige seiner wichtigsten Highlights:
- Leichtgewichtig und übertragbar: Du brauchst MailHog nicht zu installieren, um es zu benutzen. Das ist einer der Hauptvorteile von MailHog. Das macht es hochgradig flexibel, um es auf fast jedem Betriebssystem oder Webserver laufen zu lassen.
- Erweiterte SMTP-Unterstützung: MailHog unterstützt nicht nur das Einrichten eines Fake-SMTP-Servers, sondern du kannst es auch verwenden, um einen ESMTP-Server (Extended SMTP) einzurichten. Es beinhaltet auch Unterstützung für SMTP AUTH und PIPELINING.
- API-Unterstützung: Du kannst MailHogs eingebaute HTTP API (oder JSON API) verwenden, um E-Mails abzurufen, aufzulisten und zu löschen.
- Fehlertest: Du kannst Jim, MailHogs Chaos Monkey (ja, er heißt tatsächlich so), zur Veranstaltung einladen, um die E-Mail-Zustellbarkeit deiner Web-App zu testen. Er tut dies, indem er nach dem Zufallsprinzip gängige E-Mail-Zustellbarkeitsprobleme erzeugt, wie z.B. abgelehnte Verbindungen/Authentifizierungen und geschwindigkeitsbeschränkte Verbindungen.
- Updates in Echtzeit: MailHog nutzt das EventSource Webinterface, um sofortige Updates zu liefern.
- Erfassen und Speichern von E-Mails: Die erfassten E-Mails können in einem In-Memory-Nachrichtenspeicher gespeichert und in einer MongoDB-Datenbank und einem dateibasierten Speichersystem persistiert werden.
- Anhänge herunterladen: MailHog unterstützt den Download von einzelnen MIME-Teilen.
- Web UI: Du kannst MailHogs Web UI nutzen, um E-Mails als reinen Text, HTML oder Quelltext zu betrachten. Es unterstützt auch Multipart-MIME und kodierte Header.
- Authentifizierung: MailHog unterstützt HTTP-Basisauthentifizierung sowohl für die Web UI als auch für die API.
- Erfasste Emails freigeben: Du kannst MailHog so konfigurieren, dass erfasste E-Mails an echte SMTP-Server zur Zustellung freigegeben werden.
Abgesehen von den oben genannten Features bietet MailHog derzeit zwei Client-Bibliotheken für PHP– und NodeJS-Umgebungen an, um unkompliziert mit der MailHog API zu interagieren.
Einsatz von MailHog auf verschiedenen Plattformen
Wie bereits erwähnt, muss MailHog nicht installiert werden. Allerdings musst du es trotzdem herunterladen und in deiner Entwicklungsumgebung einrichten.
Lass uns mit dem Download von MailHog beginnen. Dann werden wir dir zeigen, wie du es auf verschiedenen Plattformen einrichten kannst. Es gibt viele Wege, wie du das machen kannst.
MailHog auf Windows
Gehe zuerst auf die MailHog Releases-Seite auf GitHub, um die neueste stabile Version für Windows herunterzuladen. Nachdem du MailHog heruntergeladen hast, kannst du es ohne jegliche externe Abhängigkeiten ausführen.
Hinweis: Zum Zeitpunkt der Erstellung dieses Artikels ist MailHog 1.0.1 die neueste Version. Du kannst es bereits für Windows, Linux und Darwin (macOS) Plattformen kompiliert herunterladen. Wenn du eine Nischenplattform verwendest, kannst du auch den Quellcode herunterladen und ihn für deinen speziellen Anwendungsfall kompilieren.
Da MailHog für Windows ein einfaches, selbstausführbares Programm ist, kannst du einfach die heruntergeladene .exe
-Datei ausführen. Falls du Sicherheitswarnungen erhältst, stelle sicher, dass du MailHog ohne Firewall-Beschränkungen auf deiner lokalen Hostumgebung ausführen kannst.
Hier siehst du, wie MailHog unter Windows 10 aussieht.
Du kannst sehen, dass der SMTP-Server auf Port 1025
und der HTTP-Server auf Port 8025
liegt.
Das ist noch nichts Besonderes, aber es ist eine Bestätigung, dass MailHog auf deinem System läuft.
Jetzt kannst du localhost:8025
oder 127.0.0.1:8025
in deinem Webbrowser besuchen, um die MailHog Web UI zu sehen.
Du kannst hier noch keine E-Mails finden, da wir keine unserer Webanwendungen für die Nutzung von MailHog konfiguriert haben. Wir werden das später in diesem Artikel behandeln.
MailHog auf Linux
Wenn du Linux (Ubuntu/Debian) verwendest, kannst du MailHog folgendermaßen einsetzen:
sudo apt-get -y install golang-go
sudo apt-get install git
go install github.com/mailhog/MailHog
Der erste Linux-Befehl installiert die Programmiersprache Golang auf deiner Entwicklungsumgebung (falls du sie nicht schon hast). Du kannst diese Zeile überspringen, wenn du Go bereits installiert hast. Der nächste Befehl installiert git
auf deiner Maschine (du kannst dies ebenfalls überspringen, wenn es bereits installiert ist).
Der dritte Befehl nutzt die Go-Richtline, um die neueste stabile Version von MailHog aus dem GitHub-Repository zu beziehen.
Als nächstes kannst du /path/to/MailHog
über dein Terminal ausführen, um MailHog zu starten. Der genaue Pfad kann abhängig von deinem Linux Betriebssystem variieren. Da die bin-Dateien von Go unter Ubuntu im Verzeichnis ~/go/bin/
gespeichert sind, kannst du den folgenden Code ausführen, um MailHog zu starten:
~/go/bin/MailHog
Das war’s auch schon. MailHog läuft jetzt auf deinem Linux Rechner. So sieht es aus.
Wenn du MailHog automatisch bei jedem Login starten möchtest, kannst du ihn mit supervisord, upstart, etc. als Daemon Serve starten lassen. Du kannst auch das init-Skript oder die Ansible-Rolle, die von geerlingguy zur Verfügung gestellt wurde, verwenden, um das gleiche zu tun.
Genau wie bei Windows kannst du sehen, dass der SMTP-Server auf Port 1025
und der HTTP-Server auf Port 8025
startet.
Besuche localhost:8025
oder 127.0.0.1:8025
in deinem Webbrowser, um die MailHog Web UI zu sehen.
MailHog auf macOS
Apple Nutzer können MailHog über Homebrew installieren. Öffne dein Terminal und führe den folgenden Befehl aus:
brew install mailhog
Das wird MailHog auf deinem macOS installieren. Als nächstes kannst du MailHog mit starten:
mailhog
Wenn du möchtest, dass MailHog automatisch beim Login startet und als Hintergrunddienst läuft, kannst du stattdessen den folgenden Befehl ausführen:
brew services start mailhog
Das war’s auch schon. MailHog ist nun auf deinem macOS installiert. Du kannst seine Web UI sehen, indem du 127.0.0.1:8025
oder localhost:8025
in deinem Browser besuchst.
MailHog auf Docker
Docker ist eine der einfachsten Möglichkeiten, MailHog auf jeder Plattform einzurichten.
Stelle zunächst sicher, dass du Docker auf deiner Maschine installiert hast. Als nächstes kannst du MailHog direkt vom Docker Hub aus starten, indem du den folgenden Befehl ausführst:
docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog
Lass uns den obigen Befehl und seine Direktiven aufschlüsseln:
docker run
startet ein Docker-Container-d
Direktive lässt den Docker-Container im Hintergrund laufen-p 1025:1025
und-p 8025:8025
Direktive setzen die Standard-SMTP-Ports von MailHog auf deine lokalen Ports ummailhog/mailhog
holt sich den neuesten MailHog-Build von Docker Hub
Alternativ kannst du das Maildir
von MailHog in dein lokales Dateisystem einbetten (statt in einen Docker Container), indem du den folgenden Befehl ausführst:
docker run -d -e "MH_STORAGE=maildir" -v $PWD/maildir:/maildir -p 1025:1025 -p 8025:8025 mailhog/mailhog
Wie zuvor kannst du localhost:8025
oder 127.0.0.1:8025
in deinem Browser besuchen, um MailHog Web UI zu nutzen.
MailHog auf Docker Compose
Docker Compose ist eine Erweiterung von Docker, die es einfach macht, mehrere Docker Container mit einem einzigen Befehl zu starten. Du tust dies, indem du alle Container, die du ausführen möchtest, in einer YAML-Datei definierst.
Standardmäßig verlangt Docker Compose, dass du diese Datei als docker-compose.yaml
benennst.
Um MailHog mit Docker Compose auszuführen, sollte deine docker-compose.yaml
Datei folgendermaßen aussehen:
version: "3"
services:
mailhog:
image: mailhog/mailhog:latest
restart: always
ports:
- 1025:1025
- 8025:8025
Innerhalb des Ordners, in dem sich diese Datei befindet, führe den folgenden Befehl aus, um MailHog im Hintergrund zu starten:
docker-compose up -d mailhog
Es funktioniert genau wie bei Docker. Nur dass du hier nicht viele Direktiven erwähnen musst, da du sie bereits definiert hast.
Du kannst nun localhost:8025
oder 127.0.0.1:8025
in deinem Browser eingeben, um die MailHog Web UI zu sehen.
Zusätzlich zu den oben genannten Methoden findest du im GitHub Repo von MailHog auch eine Anleitung für die Bereitstellung von MailHog auf AWS Elastic Beanstalk.
Konfigurieren von MailHog mit mhsendmail
MailHog leitet E-Mails von Webapplikationen auf seinen SMTP-Server um, indem es mhsendmail verwendet, einen sendmail
-Ersatz, der speziell für MailHog entwickelt wurde. Es stellt sicher, dass die E-Mails deiner Web-App über den SMTP-Server localhost:1025
gesendet und empfangen werden, für den MailHog standardmäßig konfiguriert ist.
Um loszulegen, musst du mhsendmail
herunterladen und installieren. Abhängig von deiner Plattform, kannst du dies auf verschiedene Arten angehen.
Wenn du zum Beispiel Ubuntu verwendest, kannst du mhsendmail
aus dem GitHub Repository herunterladen, indem du den folgenden Befehl verwendest:
wget https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64
Als nächstes machst du diese Datei ausführbar und verschiebst sie in dein Benutzerverzeichnis. Um dies zu tun, verwende den folgenden Befehl:
sudo chmod +x mhsendmail_linux_amd64
sudo mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail
Alternativ kannst du mhsendmail
auch auf Golang oder Homebrew erhalten, indem du diesen Befehl ausführst:
go install github.com/mailhog/mhsendmail
Stell sicher, dass Go installiert ist, bevor du den obigen Befehl ausführst. Wenn du auf Linux bist, lies den Abschnitt MailHog auf Linux weiter oben. Um Go mit Homebrew zu installieren, führe den folgenden Befehl aus:
brew install go
Nachdem du mhsendmail
heruntergeladen hast, kannst du nun mit der Installation fortfahren:
go install github.com/mailhog/mhsendmail
Als nächstes musst du deine Web-Applikation so konfigurieren, dass sie MailHogs mhsendmail
als E-Mail-Routing-Service verwendet. Auf den meisten Linux-Systemen ist es standardmäßig so eingestellt, dass sendmail
verwendet wird.
Du kannst dies tun, indem du deine php.ini
Datei editierst. Auf den meisten Servern findest du die php.ini Datei im Root-Verzeichnis. Du kannst auch den folgenden Befehl ausführen, um herauszufinden, wo sie sich befindet:
php -i | grep 'php.ini'
Für Linux-Maschinen, die mit Ubuntu laufen, musst du den Wert von sendmail_path
auf folgenden setzen:
sendmail_path = /usr/local/bin/mhsendmail
Anstelle des obigen Wertes kannst du auch den unten gezeigten Wert verwenden, um das gleiche Ergebnis zu erhalten:
sendmail_path = /usr/sbin/sendmail -S mail:1025
Wenn du Go benutzt hast, um mhsendmail
zu installieren, oder wenn du eine andere Variante von Linux benutzt, kann der Pfad leicht variieren, abhängig von deiner Plattform/Konfiguration. Stelle sicher, dass du auf das richtige mhsendmail
-Verzeichnis verlinkst.
Mac-Benutzer müssen ihre Postfix
-Konfigurationsdatei bearbeiten, um MailHog richtig einzurichten. Du kannst die folgende Postfix-Konfiguration verwenden:
myhostname = localhost
relayhost = [127.0.0.1]:1025
Für WordPress-Seiten kannst du das kostenlose MailHog für WordPress-Plugin verwenden, um die E-Mails deiner Seite an MailHog weiterzuleiten. Um es zu nutzen, installiere und aktiviere das Plugin in deinem WordPress Admin-Dashboard. Eine bessere Alternative ist die Verwendung von DevKinsta. Wir werden es später ausführlich behandeln.
Lies die MailHog-Dokumentation, um zu erfahren, wie du es auf verschiedenen anderen Plattformen/Konfigurationen einrichten kannst.
Zusätzliche MailHog Konfigurationsoptionen
Du kannst MailHog mit verschiedenen Umgebungsvariablen oder Kommandozeilenoptionen konfigurieren.
Zum Beispiel kannst du den Standard-Hostnamen von mailhog.example
in einen eigenen Namen ändern, indem du die Umgebungsvariable MH_HOSTNAME
oder die Kommandozeilenoption -hostname
verwendest.
Weitere Informationen findest du in der Dokumentation der MailHog Konfigurationsoptionen.
Lokale E-Mail-Tests mit MailHog
Zum Schluss wollen wir unser MailHog Setup testen, um zu sehen, ob es richtig konfiguriert ist.
Du kannst eine E-Mail mit Mailhogs CLI senden, indem du die folgenden mhsendmail
directives:
mhsendmail [email protected] <<EOF
From: Salman <[email protected]>
To: Test <[email protected]>
Subject: Hello, MailHog!
Hey there,
Missing you pig time.
Hogs & Kisses,
Salman
EOF
Im obigen Code setzt die <<EOF
Direktive ein benutzerdefiniertes Trennzeichen, damit du die Details der Test-E-Mail interaktiv im Terminal eingeben kannst. Es führt alle Eingaben aus, wenn du das Trennzeichen erneut eingibst. Hier wird eine Mail mit dem Befehl mhsendmail
verschickt.
Du kannst überprüfen, ob die E-Mail erfolgreich zugestellt wurde, indem du die MailHog Web UI besuchst.
Du kannst auch auf die Test-E-Mail klicken, um ihren Inhalt zu überprüfen.
Das ist ein gelungener Abschluss! Wir können nun feststellen, dass MailHog erfolgreich konfiguriert wurde.
Zusätzlich zur obigen Methode gibt es noch andere Möglichkeiten, eine Test-E-Mail zu versenden. Zum Beispiel kannst du unter macOS eine Test-E-Mail senden, indem du den folgenden Befehl in deinem Terminal ausführst:
date | mail -s "Hello, MailHog!" [email protected]
Unter Windows kannst du eine E-Mail mit der PowerShell senden, indem du den folgenden Code ausführst:
Send-MailMessage -To "[email protected]" -From "[email protected]" -Subject "Hello, MailHog!" -SmtpServer "localhost" -Port 1025
Du kannst auch ein PHP-Skript mit allen Maildaten definieren und die mail()
-Funktion von PHP verwenden, um eine Testmail zu versenden. Dazu definierst du dein PHP-Skript wie unten und führst es im Terminal aus:
<?php
$to = "[email protected]";
$subject = "Hey, I’m Pi Hog Pi!";
$body = "Hello, MailHog!";
$headers = "From: [email protected]" . "\r\n";
mail($to,$subject,$body,$headers);
?>
Zu guter Letzt kannst du die MailHog API nutzen, um zu testen, ob eine E-Mail erfolgreich zugestellt wurde. Wenn du ausschließlich in einer Nicht-GUI-Umgebung arbeitest (z.B. Linux Terminal, Windows PowerShell), ist die MailHog API super praktisch, um E-Mails aufzulisten, abzurufen und zu löschen.
DevKinsta und MailHog: Problemloses lokales Testen von E-Mails
Unser lokales WordPress Werkzeug, DevKinsta, nutzt MailHog, um seine E-Mail-Testfunktionen zu versorgen. Da es auch Docker verwendet, um einzelne Seiten zu verwalten, hast du einen separaten MailHog Posteingang für jede lokale Seite, die du entwickelst.
Wie bei der MailHog Web UI kannst du den lokalen E-Mail-Posteingang von DevKinsta nutzen, um E-Mails anzusehen und zu verändern (löschen, als gelesen markieren, Quelle ansehen).
Du kannst auch nach den MailHog-Logs von DevKinsta suchen, indem du den folgenden Docker-Befehl ausführst:
docker logs -f devkinsta_mailhog
Weitere Informationen findest du in der Knowledgebase von DevKinsta.
Zusammenfassung
MailHog macht E-Mail-Tests zu einem Kinderspiel. Es ist eine großartige, praktische Lösung, um die E-Mails deiner Webseite oder Web-Apps zu testen. Außerdem ist MailHog auf fast allen gängigen Plattformen einfach einzurichten und hat eine leicht zu bedienende Web-UI.
Wie MailHog ist auch DevKinsta eine großartige Möglichkeit, um mit der lokalen WordPress-Entwicklung zu beginnen. Es beinhaltet nicht nur MailHog, um E-Mails lokal zu testen, sondern kommt auch mit einem vorinstallierten Adminer für eine einfache Datenbankverwaltung.
Mit MailHog (und DevKinsta) an deiner Seite wirst du feststellen, dass das lokale Testen von E-Mails noch nie so einfach war.
Wenn du deine Erfahrungen oder Herausforderungen mit dem lokalen Testen von E-Mails mit uns teilen möchtest, schreibe uns bitte in den Kommentaren unten.
Schreibe einen Kommentar