northstage

← Alle Anleitungen

Anleitung

Dein Kontaktformular meldet „Gesendet“, aber nichts kommt an

Finde die Stelle, an der deine Nachrichten verloren gehen, und behebe sie Schritt für Schritt. Für die ersten Prüfungen brauchst du keinen Entwickler.

Zuletzt aktualisiert:

Die kurze Antwort

Die Dankesmeldung heisst nur, dass die Website das Formular angenommen hat, nicht dass eine E-Mail verschickt, zugestellt oder gelesen wurde. Eine Nachricht geht an einer von vier Stellen verloren: Die Website hat gar nicht erst versucht zu senden, der Mailserver hat sie abgelehnt, das empfangende Postfach hat sie aussortiert, oder ein eigener Spam-Schutz hat sie verworfen. Schick eine markierte Testnachricht und prüfe jede Station der Reihe nach. Eine sehr häufige Lösung: von einer Adresse der eigenen Domain senden, mit eingerichtetem SPF und DKIM, und die Adresse des Besuchers als Reply-To eintragen.

In unter einer Minute gesehen

Ein kurzes Video zum Problem und seiner Lösung. Die Untertitel sind im Video.

Für wen diese Anleitung ist

Du betreibst eine Website mit Kontakt- oder Anfrageformular. Jemand füllt es aus und sieht eine Dankesmeldung, aber die E-Mail landet nie in deinem Postfach. Oder du vermutest, dass es nur bei einzelnen Besuchern passiert, weil dir jemand sagt „Ich habe dir letzte Woche geschrieben“ und du nie etwas gesehen hast.

Die Anleitung gilt für WordPress, Baukästen sowie handgebaute und statische Websites. Die ersten Prüfungen brauchen kein technisches Wissen. Spätere Schritte betreffen DNS-Einstellungen und das Mail- oder Hosting-Konto, dafür brauchst du eventuell die Person, die sich um deine Domain kümmert.

Der Weg einer Nachricht und wo sie verloren geht

Eine Formularnachricht durchläuft mehrere Stationen, und die Dankesmeldung erscheint meist schon nach der ersten:

  • Der Browser schickt das Formular an einen Handler: ein Plugin, ein Skript auf deinem Server, eine Serverless-Funktion oder einen externen Formulardienst.
  • Der Handler gibt die Nachricht an einen Mail-Versender weiter: das eingebaute Mail deines Servers, ein SMTP-Konto oder einen E-Mail-Versanddienst.
  • Der Versender übergibt sie dem empfangenden Mailserver, der sie annimmt, verzögert, ablehnt oder in Quarantäne legt.
  • Am Ende liegt sie in einem Postfach: im Posteingang, im Spam-Ordner oder, mit Weiterleitungsregeln, irgendwo anders.

Die Dankesseite beweist nur, dass die erste Station funktioniert hat. Alles danach kann scheitern, ohne dass du oder der Besucher etwas merkt. Darum prüfst du jede Station der Reihe nach, statt zu raten.

So findest du heraus, welche Ursache zutrifft

Mach zuerst den Test aus Schritt 1 und ordne dann zu, was du siehst:

  • Der Test landet im Spam oder Junk. Der empfangende Server traut dem Absender nicht. Wahrscheinliche Ursache: die Absenderadresse oder fehlende E-Mail-Authentifizierung. Weiter mit den Schritten 3 und 4.
  • Der Test kommt nie an, und dein Versanddienst zeigt dazu nichts an. Der Handler hat nie gesendet. Wahrscheinliche Ursache: ein Fehler, den der Handler versteckt, oder ein abgeschalteter Versand. Weiter mit Schritt 2.
  • Der Versanddienst zeigt „bounced“, „rejected“ oder „deferred“. Lies den Begründungstext, er nennt meist das Problem. Weiter mit den Schritten 3, 4 und 7.
  • Der Dienst zeigt „delivered“, aber du findest die Nachricht nicht. Der empfangende Server hat sie angenommen. Schau in Spam, Quarantäne, Weiterleitungsregeln und die Empfängeradresse. Weiter mit Schritt 5.
  • Bei dir klappt es, aber Nachrichten einzelner Besucher fehlen. Eine Spam-Regel im Formular blockt echte Menschen, oder ein Limit ist erreicht. Weiter mit den Schritten 6 und 7.
  • Es lief monatelang und hörte dann auf. Etwas hat sich geändert: ein abgelaufener Schlüssel, ein aufgebrauchtes Kontingent, neue DNS-Einstellungen oder ein Plugin-Update. Weiter mit Schritt 7.

Schritte zur Lösung

  1. Mach einen echten Test und notiere die Uhrzeit. Sende das Live-Formular selbst ab. Gib als Adresse des Besuchers eine andere E-Mail-Adresse ein als die, die die Nachrichten empfängt, am besten bei einem anderen Anbieter, und schreib ein eindeutiges Wort in die Nachricht, zum Beispiel „test-1017“. Notiere Uhrzeit und Zeitzone und warte zehn Minuten, denn manche Server verzögern unbekannte Absender absichtlich. Suche im empfangenden Postfach, Spam-Ordner eingeschlossen, nach deinem eindeutigen Wort.

  2. Finde heraus, was der Handler nach dem Absenden tut. Öffne die Seite, öffne die Entwicklerwerkzeuge deines Browsers (F12), wechsle zum Reiter „Netzwerk“ (Network) und sende das Formular ab. Klicke auf die gesendete Anfrage und lies die Antwort. Ein „200 OK“ sagt nur, dass der Handler geantwortet hat. Suche dann auf der anderen Seite nach einem Protokoll:

    • WordPress: Installiere ein SMTP-Plugin mit Test-E-Mail-Funktion (zum Beispiel WP Mail SMTP) und nutze ein Formular-Plugin, das jeden Eintrag speichert, etwa Contact Form 7 mit dem Flamingo-Zusatz oder Gravity Forms. Ist der Eintrag gespeichert, aber keine E-Mail rausgegangen, liegt der Fehler beim Versand.
    • Statische oder handgebaute Websites: Lies das Protokoll der Funktion oder des Skripts, das das Formular verarbeitet. Ein häufiger Fehler ist Code, der den E-Mail-Dienst aufruft, die Antwort ignoriert und trotzdem „Erfolg“ meldet. Der Handler sollte nur dann Erfolg melden, wenn der E-Mail-Dienst die Nachricht angenommen hat, und sonst einen Fehler.
    • Externer Formulardienst: Melde dich an, schau in die Liste der Einsendungen und in die Zustellhinweise und prüfe, welche Benachrichtigungsadresse dort eingetragen ist.
  3. Sende von deiner eigenen Domain und trage den Besucher als Reply-To ein. Viele Formulare setzen die Adresse des Besuchers als Absender (From). Eine Nachricht, die angeblich von einer gmail.com-Adresse kommt, aber von deinem Server verschickt wird, fällt bei den Prüfungen der Postfachanbieter durch (SPF, DKIM und DMARC-Alignment, erklärt in der dmarc.org-FAQ) und wird abgelehnt oder als Spam einsortiert. Stelle das Formular so um, dass die Nachricht von einer Adresse deiner eigenen Domain kommt, zum Beispiel formular@deinedomain.com, und die Adresse des Besuchers im Header Reply-To steht. Mit „Antworten“ erreichst du den Besucher trotzdem.

  4. Sende über einen authentifizierten Dienst und richte SPF, DKIM und DMARC ein. Die PHP-Funktion mail() oder das Standard-Mail eines Webhosters verschickt Nachrichten, die nicht sauber authentifiziert sind, und viele Anbieter behandeln sie mit Misstrauen. Nimm die SMTP-Zugangsdaten deines Postfachanbieters oder eines E-Mail-Versanddienstes und trage die DNS-Einträge ein, die er verlangt. Die Absender-Richtlinien von Google verlangen von jedem Absender SPF oder DKIM, von Absendern grosser Mengen SPF, DKIM und DMARC mit passender From-Domain. Ein Kontaktformular verschickt wenig Mail, aber dieselben Prüfungen entscheiden, was damit passiert. Die Einträge sehen so aus (die genauen Werte liefert dein Dienst):

    • SPF: ein TXT-Eintrag für deinedomain.com mit einem Wert wie v=spf1 include:spf.mail-dienst.example ~all
    • DKIM: ein TXT- oder CNAME-Eintrag mit dem Namen selector1._domainkey.deinedomain.com, Wert aus deinem Mail-Dienst kopiert
    • DMARC: ein TXT-Eintrag mit dem Namen _dmarc.deinedomain.com und dem Wert v=DMARC1; p=none; rua=mailto:dmarc@deinedomain.com

    Eine Domain sollte nur einen SPF-Eintrag haben, führe die include:-Angaben also in einem zusammen. Nutze die Schaltfläche „Domain verifizieren“ des Dienstes und wiederhole dann den Test aus Schritt 1. Öffne die angekommene Nachricht, wähle „Original anzeigen“ (Gmail) oder die Kopfzeilen und suche nach spf=pass, dkim=pass und dmarc=pass.

  5. Prüfe, wo die Nachricht stehen geblieben ist. Zwei Stellen führen Protokoll:

    • Versandseite: das Protokoll deines E-Mail-Versanddienstes oder SMTP-Anbieters. Such deinen Test anhand von Uhrzeit und Empfänger und lies den Status: accepted, delivered, deferred, bounced oder complained. Zu einem Bounce gibt es einen Begründungstext. Die meisten Dienste zeigen diese Status in einem Dashboard, etwa in Resends Liste der Ereignistypen.
    • Empfangsseite: Spam-, Junk- und Quarantäne-Ordner, Postfachregeln und Weiterleitungen sowie ein Tippfehler in der Empfängeradresse. Läuft deine Mail über Microsoft 365 oder Google Workspace, kann eine Administratorin oder ein Administrator eine Nachrichtenverfolgung (Microsoft) oder eine E-Mail-Protokollsuche (Google) starten und sehen, ob die Nachricht angekommen ist und was danach geschah. Wird die Adresse an ein anderes Postfach weitergeleitet, prüfe auch dieses letzte Postfach.
  6. Schliesse Deinen eigenen Spam-Schutz aus. Honeypot-Felder, CAPTCHAs, Ratenbegrenzungen, Mindest-Ausfüllzeiten und Wortfilter weisen auch echte Menschen ab. Probiere das Formular mit dem Handy über mobile Daten und mit eingeschalteter Browser-Autofill-Funktion. Autofill kann ein verstecktes Honeypot-Feld ausfüllen, und ein Mobilfunknetz oder ein Büro teilt sich oft eine IP-Adresse, die eine Ratenbegrenzung schneller erreicht. Eine geblockte Einsendung sollte mit dem Grund gespeichert werden, und der Besucher sollte eine klare Meldung sehen, nie ein falsches „Gesendet“.

  7. Prüfe Limits, Schlüssel und jüngste Änderungen. Gratis-Pläne von E-Mail- und Formulardiensten haben Tages- oder Monatslimits, darüber hinaus werden Nachrichten abgelehnt oder verworfen. Schau auf die Nutzungsseite deines Plans (Resends Kontingente sind ein Beispiel). Frage dann, was sich um den Zeitpunkt geändert hat, an dem die Nachrichten ausblieben: ein abgelaufener oder ersetzter API-Schlüssel, ein Umzug der Website oder geänderte DNS-Einträge (beim Wechsel zu einem neuen Hoster gehen Mail-Einträge oft verloren), ein Plugin- oder PHP-Update, eine geänderte Empfängeradresse. Trage Ablaufdaten von Schlüsseln und Domains in deinen Kalender ein.

  8. Mach Fehler das nächste Mal sichtbar. Einmal beheben reicht nicht, denn dasselbe kann unbemerkt wieder kaputtgehen. Vier Gewohnheiten verhindern das:

    • Eine Kopie behalten. Speichere jede Einsendung (Datenbank, Tabelle oder die Einträge des Formular-Plugins), bevor du die E-Mail verschickst, mit einem Status wie empfangen, gesendet oder fehlgeschlagen. So geht keine Anfrage verloren, auch wenn das Mail ausfällt. Schütze die Kopien per Zugriffsrechten und lösche sie nach einer festgelegten Frist.
    • Ehrlich antworten. Zeige die Dankesmeldung erst, nachdem der Versender die E-Mail angenommen hat. Sonst zeige einen Fehler mit einem anderen Weg zu dir, etwa deiner E-Mail-Adresse.
    • Bei Fehlern alarmieren. Lass dich vom Handler informieren, wenn der Versand scheitert oder ein Limit nah ist, über einen anderen Kanal als das Postfach des Formulars selbst, zum Beispiel per Chat-Nachricht oder zweiter Adresse. Bietet dein E-Mail-Dienst Webhooks für Bounces und Beschwerden, nutze sie.
    • Einen geplanten Test laufen lassen. Sende einmal pro Tag oder pro Woche einen klar markierten Test über das Live-Formular und prüfe, dass er gespeichert, angenommen und zugestellt wurde. Kommt er nicht in der erwarteten Zeit an, löse den Alarm aus. Dafür reicht ein geplanter Job in deinem CI-System oder ein Uptime-Dienst, der eine Formularprüfung ausführen kann.

    Halte in den Protokollen die UTC-Zeit, eine Einsendungs-ID, die Nachrichten-ID des E-Mail-Dienstes, den Status und einen allfälligen Fehlercode fest. Nachrichtentext, Passwörter und Schlüssel gehören nicht hinein, wie auch das OWASP Logging Cheat Sheet rät.

Wann du Hilfe holen solltest

Hol dir jemanden mit Erfahrung dazu, wenn:

  • der Test nach den Schritten 1 bis 5 immer noch fehlt, obwohl der Dienst „delivered“ meldet
  • du nicht an die DNS-Einstellungen, das Hosting-Konto oder die Mail-Verwaltung kommst oder nicht weisst, wer das kann
  • das Formular aus eigenem Code besteht, den niemand pflegt
  • Bounce- oder DMARC-Berichte Absender zeigen, die du nicht kennst und die deine Domain verwenden
  • verlorene Nachrichten dich Kunden oder Fristen kosten würden, etwa bei Angebotsanfragen, Buchungen oder rechtlichen Mitteilungen, und du ein überwachtes Setup willst statt zu hoffen

Lieber Unterstützung?

Du kannst alles selbst umsetzen. Wenn du es lieber abgibst, buche den kostenlosen 30-Minuten-Videocall und bring die Adresse der Seite mit dem Formular und das Ergebnis deines Tests mit. Oder schreib mir einfach.