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 Web UI
MailHog Web UI

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.

Wie ein SMTP-Server funktioniert (Quelle: Wikimedia Commons)
Wie ein SMTP-Server funktioniert (Quelle: Wikimedia Commons)

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.
Jim ist MailHog’s “Chaos Monkey”
Jim ist MailHog’s “Chaos Monkey”

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.

MailHog Releases-Seite
MailHog Releases-Seite

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.

So läuft MailHog auf Windows 10
So läuft MailHog auf Windows 10

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.

MailHog Web UI auf Windows
MailHog Web UI auf Windows

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.

Wie MailHog auf Linux (Ubuntu) läuft
Wie MailHog auf Linux (Ubuntu) läuft

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 Web UI unter Linux (Ubuntu)
MailHog Web UI unter Linux (Ubuntu)

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 um
  • mailhog/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.

Versenden einer Test-E-Mail mit 'mhsendmail'
Versenden einer Test-E-Mail mit ‚mhsendmail‘

Du kannst überprüfen, ob die E-Mail erfolgreich zugestellt wurde, indem du die MailHog Web UI besuchst.

Die Test-E-Mail wurde erfolgreich zugestellt
Die Test-E-Mail wurde erfolgreich zugestellt

Du kannst auch auf die Test-E-Mail klicken, um ihren Inhalt zu überprüfen.

Den Inhalt der Test-E-Mail überprüfen
Den Inhalt der Test-E-Mail ü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.

DevKinsta's 'Email Inbox' wird von MailHog betrieben
DevKinsta’s ‚Email Inbox‘ wird von MailHog betrieben

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).

E-Mails in DevKinsta ansehen und verändern.
E-Mails in DevKinsta ansehen und verändern.

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.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.