SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor · Aktualisiert 2026-08-21

Mailpit auf einem VPS als Wegwerf-Posteingang einrichten

Mit Mailpit fangen Sie Testmails auf einer Wegwerf-Domain ab, lesen sie im Webinterface und verhindern, dass Ihre Staging-App echte Kunden anschreibt.

Was ein Wegwerf-E-Mail-Posteingang ist

Ein Wegwerf-E-Mail-Posteingang ist ein kleiner SMTP-Server (Simple Mail Transfer Protocol), der E-Mails für jede Adresse annimmt, aber keine davon zustellt. Ihre Staging-Anwendung sendet E-Mails dorthin statt an einen echten Mailanbieter, und jede Nachricht bleibt dort. Sie lesen die eingegangenen Nachrichten in einer Weboberfläche. Eine falsche Empfängerliste oder eine fehlerhafte Vorlage verursacht dadurch keine Kosten, weil die E-Mail den Posteingang nicht verlässt.

In diesem Leitfaden richten Sie einen solchen Posteingang auf einem einzelnen VPS mit Docker Compose ein. Mailpit dient als Catch-all-Ziel. Der SMTP-Listener ist so gebunden, dass nur Ihre Anwendung ihn erreichen kann. Die Weboberfläche läuft hinter nginx mit Transport Layer Security (TLS) und einem Passwort. Ein Aufbewahrungslimit verhindert, dass der Posteingang den Datenträger füllt. Falls Compose für Sie neu ist, beschreibt die Compose-Grundlagen für einen VPS die in diesem Leitfaden vorausgesetzte Dateistruktur.

Das Ergebnis ist ein Testwerkzeug und kein Mailserver. Es bietet keine Konten, keine Zustellung und keine Spamfilterung. Echte Postfächer für reale Personen erfordern einen vollständigen Mailserver wie Mailcow und sind eine deutlich umfangreichere Aufgabe.

Mailpit vs. Inbucket vs. MailHog: Welche Mail-Senke Sie verwenden sollten

Drei Tools übernehmen diese Aufgabe. Sie unterscheiden sich beim Wartungsstatus, bei den Ports, auf denen sie Verbindungen annehmen, und bei den Möglichkeiten zur Verarbeitung einer Nachricht nach ihrer Annahme. Die folgenden Versionen wurden im August 2026 geprüft.

MailHog (mailhog/mailhog) nimmt SMTP-Verbindungen auf Port 1025 an und stellt seine Oberfläche auf Port 8025 bereit. Es funktioniert weiterhin. Im Standard-Branch wurde seit August 2022 kein Commit mehr erstellt. Im Issue-Tracker sind mehr als 250 Issues offen. Damit würden Sie ungepatchte Abhängigkeiten in Ihrem Testpfad einsetzen. Beginnen Sie keine neuen Arbeiten damit.

Inbucket (inbucket/inbucket) nimmt SMTP-Verbindungen auf Port 2500, Verbindungen für die Weboberfläche auf Port 9000 und POP3-Verbindungen auf Port 1100 an (Post Office Protocol, Version 3). Version 3.1.1 wurde im Dezember 2025 veröffentlicht. Das Tool speichert Nachrichten als Dateien unter /storage und löscht sie selbstständig nach Ablauf der Aufbewahrungsfrist. Das Image setzt dafür INBUCKET_STORAGE_RETENTIONPERIOD=72h und INBUCKET_STORAGE_MAILBOXMSGCAP=300. Wählen Sie Inbucket, wenn ein Test E-Mails mit einer POP3-Clientbibliothek statt über einen HTTP-Aufruf abrufen muss.

Mailpit (axllent/mailpit) verwendet dieselben Ports wie MailHog, 1025 und 8025. Sie können MailHog daher ersetzen, ohne die Anwendungskonfiguration anzupassen. Version 1.30.7 wurde am 8. August 2026 veröffentlicht. Die für diese Anleitung benötigten Funktionen sind bereits im Binary enthalten: eine Kennwortdatei für die Weboberfläche und die API (Application Programming Interface), eine maximale Nachrichtenanzahl, eine maximale Nachrichtenalter und ein Empfängerfilter. Im weiteren Verlauf dieser Anleitung wird Mailpit verwendet.

Funktionsweise des Catch-all und warum DNS nicht beteiligt ist

Ihre Anwendung ermittelt hier nicht, wohin die Nachricht zugestellt werden soll. Sie übergibt einen Host und einen Port, öffnet eine TCP-Verbindung und kündigt RCPT TO:<anyone@example.test> an. Mailpit akzeptiert diesen Empfänger unabhängig von seinem Inhalt, speichert die Nachricht und leitet nichts weiter. Die Domain wird nie aufgelöst. Daher funktioniert example.test, obwohl .test ein reservierter Name ist, der nirgendwo im Domain Name System (DNS) existiert.

Das ist der gesamte Mechanismus. Deshalb ist das Postfach standardmäßig sicher. Es ist kein MX-(Mail-Exchange-)Record beteiligt, es wird keine Zustellung versucht, und keine Nachricht kann eine reale Person erreichen.

Richten Sie Ihre Staging-Anwendung auf den Sink

Setzen Sie den SMTP-Host der Anwendung auf mailpit, wenn die Anwendung als Container im selben Compose-Projekt läuft, oder auf 127.0.0.1, wenn sie auf dem Host läuft. Setzen Sie den Port auf 1025, deaktivieren Sie TLS und lassen Sie Benutzername und Passwort leer. Mailpit akzeptiert anonyme E-Mails.

Einige Frameworks verweigern den Versand ohne Zugangsdaten. Mit MP_SMTP_AUTH_ACCEPT_ANY=1 akzeptiert Mailpit jeden Benutzernamen und jedes Passwort. MP_SMTP_AUTH_ALLOW_INSECURE=1 erlaubt die Mechanismen PLAIN und LOGIN über eine unverschlüsselte Verbindung. Diese beiden Einstellungen sind hier nur sicher, weil der Listener nicht aus dem Internet erreichbar ist. Die folgende Bereitstellung stellt dies sicher.

MP_SMTP_ALLOWED_RECIPIENTS sollten Sie bereits am ersten Tag setzen. Die Einstellung erwartet einen regulären Ausdruck und weist jeden Empfänger zurück, der nicht darauf passt. Richten Sie sie auf Ihre Testdomain. Wenn eine Staging-Datenbank noch eine echte Kundenadresse enthält, erscheint dadurch ein sichtbarer Fehler im Anwendungslog, statt dass eine Nachricht unbemerkt im Sink landet.

Die Docker-Compose-Datei

Erstellen Sie zuerst das Verzeichnis und eine Passwortdatei für die Weboberfläche. htpasswd -B schreibt einen bcrypt-Hash, und Mailpit kann ebenfalls bcrypt sowie Klartext verarbeiten.

mkdir -p ~/mailpit/data
cd ~/mailpit
sudo apt update && sudo apt install -y apache2-utils
htpasswd -B -c data/ui-auth qa

Schreiben Sie compose.yaml:

services:
  mailpit:
    image: axllent/mailpit:v1.30
    container_name: mailpit
    restart: unless-stopped
    ports:
      - "127.0.0.1:8025:8025"
      - "127.0.0.1:1025:1025"
    volumes:
      - ./data:/data
    environment:
      MP_DATABASE: /data/mailpit.db
      MP_MAX_MESSAGES: 2000
      MP_MAX_AGE: 14d
      MP_UI_AUTH_FILE: /data/ui-auth
      MP_SMTP_AUTH_ACCEPT_ANY: 1
      MP_SMTP_AUTH_ALLOW_INSECURE: 1
      MP_SMTP_ALLOWED_RECIPIENTS: '@example\.test$$'

Das doppelte Dollarzeichen ist kein Tippfehler. Compose interpretiert ein einzelnes $ als Beginn einer zu ersetzenden Variable. Mit $$ übergeben Sie daher ein einzelnes wörtliches Dollarzeichen an den Container. Der reguläre Ausdruck erreicht Mailpit als @example\.test$.

Starten Sie den Container und prüfen Sie den Gesundheitsstatus:

docker compose up -d
docker compose ps

In der Spalte STATUS sollte Up ... (healthy) stehen. Das Image enthält einen eigenen Healthcheck, der alle 15 Sekunden /mailpit readyz ausführt. Ein Container, der dauerhaft den Status starting hat oder in den Status unhealthy wechselt, stellt Port 8025 innerhalb des Containers nicht bereit. Lesen Sie docker compose logs mailpit, bevor Sie andere Änderungen vornehmen.

Beide veröffentlichten Ports enthalten eine Bindungsadresse. Diese Adresse ist die Sicherheitskontrolle. Innerhalb des Containers lauscht Mailpit auf 0.0.0.0. Das ist unproblematisch, weil der Container einen eigenen Netzwerk-Namespace hat. Die linke Seite der Zuordnung legt fest, wer den Dienst von außen erreicht. Schreiben Sie 8025:8025, bindet Docker jede Adresse auf dem Host, einschließlich der öffentlichen Adresse.

Wenn Ihre Staging-Anwendung ein Dienst in derselben Datei ist, löschen Sie die Zuordnung 1025 vollständig und konfigurieren Sie die Anwendung so, dass sie den Hostnamen mailpit auf Port 1025 verwendet. Container in einem gemeinsamen Compose-Netzwerk erreichen sich direkt. Der SMTP-Port berührt den Host dadurch überhaupt nicht. So lösen Compose-Netzwerke Dienstnamen auf behandelt diese Namensauflösung.

Eine Nachricht senden und prüfen, ob sie angekommen ist

python3 - <<'EOF'
import smtplib
from email.message import EmailMessage

m = EmailMessage()
m["From"] = "staging@example.test"
m["To"] = "anyone@example.test"
m["Subject"] = "Mailpit smoke test"
m.set_content("If this appears in the web interface, the sink works.")
with smtplib.SMTP("127.0.0.1", 1025) as s:
    s.send_message(m)
EOF

Das Skript gibt bei Erfolg nichts aus. Prüfen Sie über die API, ob die Nachricht gespeichert wurde:

curl -s -u qa:yourpassword http://127.0.0.1:8025/api/v1/messages

Der Befehl gibt JSON mit den gespeicherten Nachrichten zurück. Wenn Sie das Flag -u weglassen, wird dieselbe Anfrage abgewiesen, weil MP_UI_AUTH_FILE sowohl die API als auch die Weboberfläche schützt. Jeder Test, der den Posteingang liest, muss diese Zugangsdaten ebenfalls mitsenden.

Ein ConnectionRefusedError aus dem Python-Skript bedeutet, dass auf 127.0.0.1:1025 kein Prozess Verbindungen annimmt. Das ist das erwartete Ergebnis, wenn Sie die SMTP-Zuordnung entfernt haben. Die Prüfung muss dann aus einem Container im selben Compose-Netzwerk ausgeführt werden.

Weboberfläche mit einem Passwort über nginx veröffentlichen

Die Oberfläche ist derzeit nur über die Loopback-Adresse erreichbar. nginx übernimmt die TLS-Terminierung und fordert ein Passwort an, bevor eine Anfrage die Oberfläche erreicht.

sudo htpasswd -B -c /etc/nginx/mailpit.htpasswd qa
server {
    listen 443 ssl;
    server_name mail-test.example.com;

    ssl_certificate     /etc/letsencrypt/live/mail-test.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mail-test.example.com/privkey.pem;

    auth_basic           "mailpit";
    auth_basic_user_file /etc/nginx/mailpit.htpasswd;

    location / {
        proxy_pass http://127.0.0.1:8025;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Führen Sie nach einer Syntaxprüfung mit sudo nginx -t && sudo systemctl reload nginx einen Reload durch. Welche Funktion die einzelnen Direktiven in einem Reverse-Proxy-Block haben ist lesenswert, wenn dies Ihr erster Proxy ist.

Verwenden Sie in der nginx-Datei und in data/ui-auth denselben Benutzernamen und dasselbe Passwort. nginx leitet den Authorization-Header des Browsers an das Backend weiter, sodass passende Zugangsdaten beide Prüfungen mit einer einzigen Abfrage erfüllen. Bei unterschiedlichen Zugangsdaten speichert der Browser einen Satz, den die zweite Prüfung ablehnt.

Die Header Upgrade und Connection sind nicht optional. Mailpit überträgt neue Nachrichten über einen WebSocket an eine geöffnete Seite. Ein Proxy, der HTTP/1.1 ohne diese Header verwendet, kann die Verbindung nicht aktualisieren. Die Seite wird dann zwar korrekt geladen, ändert sich aber nicht mehr: Neue Nachrichten treffen ein, die API zeigt sie an, und die Liste bleibt unverändert, bis Sie die Seite neu laden.

Behalten Sie beide Zugriffsschutzmechanismen bei. Das nginx-Passwort schützt die öffentliche Adresse. MP_UI_AUTH_FILE schützt Port 8025 selbst. Das ist wichtig, weil alle Passwort-Reset-Links, die Ihre Staging-Anwendung jemals erzeugt hat, in dieser Oberfläche lesbar sind.

Lassen Sie den Sink niemals zu einem Open Relay werden

Ein Open Relay ist ein SMTP-Server, der Nachrichten von beliebigen Absendern annimmt und an beliebige Ziele weiterleitet. Spammer suchen ständig danach. Wird ein solcher Server unter Ihrer Adresse gefunden, führt das zu Abuse-Meldungen und einem gesperrten Konto.

Mailpit ist standardmäßig kein Open Relay, weil es Nachrichten niemals weiterleitet. Das Relaying bleibt deaktiviert, bis Sie MP_SMTP_RELAY_CONFIG auf eine Relay-Konfigurationsdatei verweisen. Auch die Release-Aktion in der Benutzeroberfläche hat bis dahin keine Wirkung. Diese Einstellung bewusst nicht zu setzen, ist eine Sicherheitsentscheidung.

Diese Eigenschaft kann auf zwei Arten verloren gehen. Konfigurieren Sie ein Relay, damit die Release-Schaltfläche funktioniert, und veröffentlichen anschließend den SMTP-Port im Internet, haben Sie ein funktionsfähiges Open Relay eingerichtet. Veröffentlichen Sie den Port ohne Relay, können Fremde zwar keine E-Mails über Ihren Server versenden. Sie können aber Ihren Speicher füllen und Inhalte in die Benutzeroberfläche einbringen, der Ihr Team vertraut.

Die Falle auf einem Docker-Host ist die Firewall. Beim Veröffentlichen eines Ports schreibt Docker eigene Regeln in die Tabelle nat. Der für den Container bestimmte Netzwerkverkehr wird dort verarbeitet, bevor ufw (uncomplicated firewall) seine Regeln anwenden kann. sudo ufw deny 1025/tcp meldet Erfolg und ändert nichts. Warum Docker Ports direkt an ufw vorbei veröffentlicht erläutert die Reihenfolge der Kette.

Die Lösung liegt in der Adresse des Mappings, nicht in einer Firewall-Regel. Prüfen Sie, woran tatsächlich gebunden ist:

sudo ss -ltnp | grep -E ':(1025|8025)'

Eine korrekte Ausgabe zeigt 127.0.0.1:1025 und 127.0.0.1:8025. Eine Zeile mit 0.0.0.0:1025 bedeutet, dass das Mapping seine Adresse verloren hat und der Sink im Internet lauscht. Von einem anderen Rechner aus sollte nc -vz mail-test.example.com 1025 mit einem Timeout oder einer Ablehnung enden.

Wenn die Anwendung auf einem anderen Server läuft, öffnen Sie nicht Port 1025, um beide Systeme zu verbinden. Verbinden Sie beide Rechner über ein privates Netzwerk oder einen VPN-Tunnel. Binden Sie das Mapping an die Adresse dieser Schnittstelle.

Nur bei echtem eingehendem E-Mail-Verkehr MX-Records veröffentlichen

Ein MX-Record (Mail Exchanger) teilt anderen Mailservern mit, welcher Host E-Mails für eine Domain annimmt. Ohne MX-Record für Ihre Wegwerf-Domain kann keine E-Mail aus dem Internet eintreffen, weil absendende Server kein Ziel für die Zustellung haben. Das Postfach enthält dann nur Nachrichten, die Ihre eigenen Anwendungen übermittelt haben. Genau dafür ist ein Testpostfach gedacht.

Der Empfang echter E-Mails setzt einen MX-Record voraus, der auf den Server zeigt, außerdem Mailpit auf Port 25 (MP_SMTP_BIND_ADDR=0.0.0.0:25) und einen geöffneten Port. Ab diesem Zeitpunkt betreiben Sie einen öffentlichen Catch-all für jede Adresse dieser Domain. Machen Sie sich klar, was daraus folgt.

  • Innerhalb weniger Tage beginnt der Spam, weil Harvester DNS-Einträge auslesen. Anschließend probieren Dictionary-Angriffe häufige Namen durch und speichern für jeden Versuch eine Nachricht.
  • Anhänge unbekannter Absender landen auf Ihrer Festplatte und bleiben dort. Es gibt keinen Filter, daher liegt ein Archiv von einem unbekannten Absender neben Ihren eigenen Testnachrichten.
  • Jeder, der die Domain kennt, kann sich bei Drittanbieterdiensten mit einer Adresse dieser Domain registrieren. Die Bestätigungsnachricht wird an Ihren Server zugestellt. Falls die Passwortsperre jemals umgangen wird, gehören diese Konten der Person, die das Postfach liest.
  • Aufbewahrungsgrenzen sind dann keine reine Aufräumarbeit mehr, sondern werden für den Betrieb entscheidend, weil Sie das Nachrichtenvolumen nicht mehr kontrollieren.

Wenn Sie für einen Zustellbarkeitstest echten eingehenden E-Mail-Verkehr benötigen, verwenden Sie dafür eine eigene Subdomain, halten Sie MP_MAX_AGE kurz und behandeln Sie alle darin enthaltenen Nachrichten als öffentlich. Wenn Sie Postfächer benötigen, auf die sich Personen verlassen, betreiben Sie stattdessen einen echten Mailserver mit Filterung und Backups.

Aufbewahrung: Wie ein unbegrenzter Catch-all die Festplatte füllt

Mailpit behält standardmäßig 500 Nachrichten und löscht die ältesten regelmäßig, sobald diese Anzahl überschritten wird. MP_MAX_MESSAGES: 0 deaktiviert das automatische Löschen vollständig. Genau diese eine Änderung kann dazu führen, dass ein Catch-all unbemerkt die Festplatte füllt. MP_MAX_AGE fügt eine zeitliche Begrenzung hinzu und benötigt dafür Stunden oder Tage. Sie wird als 36h oder 14d angegeben.

MP_DATABASE legt fest, ob diese Daten einen Neustart überstehen. Ohne diese Option schreibt Mailpit in eine temporäre Datei, die beim Beenden des Prozesses gelöscht wird. Dadurch leert jeder Neustart den Posteingang. Mit dieser Option bleiben die Nachrichten nach Neustarts erhalten und die Datei wächst weiter.

Anhänge verbrauchen den Speicherplatz. Ein nächtlicher Job, der einen 2 MB großen PDF-Bericht an 300 Testadressen sendet, erzeugt 600 MB pro Nacht. Eine Begrenzung der Nachrichtenanzahl reagiert darauf allein nicht rechtzeitig. Berücksichtigen Sie dieses Wachstum bei der verfügbaren Kapazität des Volumes. Ein speicherintensiver Nachbar wie PhotoPrism oder Immich hat auf einer kleinen VPS-Festplatte möglicherweise bereits den größten Teil des Speicherplatzes belegt.

du -h ~/mailpit/data/mailpit.db
df -h /

Leeren Sie den Speicher zwischen CI-Läufen, statt auf das Auslösen einer Begrenzung zu warten:

curl -s -u qa:yourpassword -X DELETE http://127.0.0.1:8025/api/v1/messages

Inbucket löst dasselbe Problem mit INBUCKET_STORAGE_RETENTIONPERIOD (72h im Image) und INBUCKET_STORAGE_MAILBOXMSGCAP (300). Unabhängig davon, welche Lösung Sie verwenden, legen Sie die Begrenzung fest, bevor die erste Testsuite darauf zugreift.

Postfach aus der Testsuite lesen

GET /api/v1/messages listet den gespeicherten Inhalt auf, GET /api/v1/message/{ID} gibt eine Nachricht mit ihren Bestandteilen und Headern zurück, GET /api/v1/search filtert, und DELETE /api/v1/messages leert den Speicher. Die interaktive Dokumentation für die ausgeführte Version ist unter http://127.0.0.1:8025/api/v1/ verfügbar.

Ein sinnvoller Test sendet eine Nachricht, fragt wiederholt ab, bis sie erscheint, prüft den Betreff und den darin enthaltenen Link und löscht anschließend alles. Verwenden Sie eine kurze Wiederholungsschleife mit erneuten Abfragen statt einer einzelnen Anfrage, weil eine Anwendung, die E-Mails in einem Hintergrund-Worker einreiht, aus dem Sendeaufruf zurückkehrt, bevor Mailpit die Nachricht erhalten hat. Dasselbe Muster findet sich auch bei Self-hosting-Tools zum Testen und Mocken von APIs. Diese sind normalerweise die andere Hälfte einer Staging-Umgebung, die niemals auf die Produktionsumgebung zugreift.

FAQ

Ist ein selbst gehostetes Wegwerf-E-Mail-Postfach ein offenes Relay?

Nicht, solange das Relay deaktiviert bleibt. Mailpit speichert Nachrichten und leitet sie erst weiter, wenn Sie MP_SMTP_RELAY_CONFIG auf eine Relay-Konfiguration verweisen. Ein Fremder, der Port 1025 erreicht, kann daher keine E-Mails über Ihren Server versenden. Er kann jedoch Ihren Speicher füllen. Binden Sie den SMTP-Port deshalb an eine Adresse, die nur Ihre Anwendung erreichen kann. Wenn Sie ihn in Compose als 1025:1025 veröffentlichen, wird er an jede Hostadresse gebunden. sudo ufw deny 1025/tcp schließt ihn nicht, weil zuerst die eigenen NAT-Regeln von Docker greifen.

Benötige ich einen MX-Record für meine Testdomain?

Nur wenn E-Mails aus dem Internet eintreffen sollen. Ohne MX-Record haben sendende Server kein Zustellziel. Das Postfach enthält dann nur Nachrichten, die Ihre eigenen Anwendungen über SMTP übermitteln. Wenn Sie den Record veröffentlichen und Port 25 öffnen, betreiben Sie einen öffentlichen Catch-all. Innerhalb weniger Tage treffen Spam und Wörterbuchangriffe ein. Bei jedem Versuch kann eine Nachricht gespeichert werden. Außerdem können Anhänge von Fremden ungefiltert auf Ihrer Festplatte landen.

Warum wird die Nachrichtenliste erst aktualisiert, wenn ich die Seite neu lade?

Mailpit überträgt neue E-Mails über einen WebSocket an eine geöffnete Seite. Ein nginx-Location-Block ohne proxy_http_version 1.1 sowie die Header Upgrade und Connection kann diese Verbindung nicht aufrüsten. Die Seite wird daher zunächst normal geladen und friert anschließend ein. E-Mails treffen weiterhin ein, und die API liefert sie weiterhin zurück. Deshalb wirkt das Postfach veraltet und nicht defekt. Fügen Sie die Zeilen hinzu, laden Sie nginx neu und laden Sie anschließend die Seite neu.

Wie verhindere ich, dass das Postfach die Festplatte füllt?

Belassen Sie MP_MAX_MESSAGES bei einem realistischen Wert und fügen Sie MP_MAX_AGE hinzu. Die standardmäßige Begrenzung liegt bei 500 Nachrichten. Wenn Sie den Wert auf 0 setzen, wird das Löschen vollständig deaktiviert. So wächst ein Catch-all mit Anhängen unbemerkt weiter. MP_MAX_AGE akzeptiert Stunden oder Tage, beispielsweise 36h oder 14d. Leeren Sie den Speicher beim CI-Teardown mit curl -X DELETE http://127.0.0.1:8025/api/v1/messages. Inbucket bietet dieselbe Funktion mit INBUCKET_STORAGE_RETENTIONPERIOD (72h) und INBUCKET_STORAGE_MAILBOXMSGCAP (300).

Sollte ich Mailpit, Inbucket oder MailHog ausführen?

Für neue Projekte Mailpit, Stand August 2026. MailHog läuft weiterhin, aber sein Standard-Branch enthält seit August 2022 keinen Commit mehr. Daher werden ungepatchte Abhängigkeiten ausgeliefert. Inbucket wird aktiv gepflegt (3.1.1, Dezember 2025) und ist die bessere Wahl, wenn ein Test POP3 benötigt. Der POP3-Server von Mailpit startet erst, wenn Sie ihm eine Passwortdatei übergeben. Mailpit verwendet dieselben Ports wie MailHog, 1025 und 8025. Für den Wechsel von MailHog müssen Sie daher nur den Namen des Images in Ihrer Compose-Datei ändern.