Fehler beim Senden in Contact Form 7 debuggen

Diese Woche wurde mir ein Fehler auf einer Website berichtet, der mit dem sehr beliebten Kontaktformular-Plugin Contact Form 7 zusammenhängt. Ich möchte euch in diesem Beitrag kurz läutern, was genau der Fehler war (damit ihr ihn nicht auch macht) und wie man Fehler mit dem Plugin besser debuggen kann.

Den Fehler finden

Meistens erhält man ja immer nur eine Meldung wie etwa “Ich kann keine Formulare abschicken”. Also muss man erst einmal selbst nachforschen, was genau wo nicht funktioniert. Die Fehlersuche war nicht gerade einfach, da das Plugin in einem Fehlerfall keine großartigen Informationen liefert, was schiefgelaufen ist. Alles was man bekommt, ist diese Meldung:

contact-form-7-fehlermeldung

Das hilft mir als Administrator der Seite auch nicht wirklich weiter. Also habe ich zuerst einmal ein neues Formular erstellt. Natürlich hat es mit diesem perfekt funktioniert. Also war meine nächste Idee, nach und nach die Einstellungen des anderen Formulars zu kopieren, bis der Fehler auftritt. Währenddessen habe ich den Fehler dann aber gesehen. Hier mal die Einstellungen, wie sie in etwa aussehen:

contact-form-7-formular-einstellungen

Na, wer sieht den Fehler? Mir ist er auch nicht sofort aufgefallen. Der Fehler steckt im Feld “From”. Hier wird die Absender Adresse eingetragen. Diese kann entweder nur eine E-Mail-Adresse sein, oder aber ein “Anzeigename” und eine E-Mail-Adresse in spitzen Klammern. Stattdessen steht dort nur die Domain in Klammern, was keine gültige E-Mail-Adresse ist und somit zu einem Fehler beim Versand führt.

Die Lösung

Um das Problem zu lösen muss man hier eigentlich nur eine gültige Adresse eintragen. Normalerweise sieht das Feld auch wie folgt aus:

[your-name] <address@example.com>

Der Nutzer hatte hier aber wohl die Adresse selbst verändert, da er nur die Domain beim Empfänger anzeigen wollte, was dann eben zu dem Fehler geführt hat. Mit Contact Form 7 ist es möglich, zwei E-Mails zu verschicken. Eine an den Besitzer der Seite und eine Kopie an den Absender des Formulars. Daher würde es eigentlich viel mehr Sinn machen, wenn die Mail von der Adresse des Absenders kommt (sofern eine E-Mail-Feld im Formular enthalten ist). Das Feld sollte dann also wie folgt aussehen:

[your-name] <[your-email]>

Fehler debuggen

In der Dokumentation von Contact Form 7 gibt es zwar seit kurzem einen Eintrag zu dieser Art von Fehlern, aber wenn es andere Probleme gibt, dann hilft die Seite zu den Fehlermeldungen leider nicht wirklich weiter.

Ich habe daher mal ein wenig im Plugincode und im Core gestöbert, ob es eine Möglichkeit gibt, einen solchen Fehler einfach zu debuggen. Seit WordPress 4.4 gibt es zwar einen Filter wp_mail_failed, allerdings ist dieser hier recht nutzlos, da er bei dieser Art von Exception keine Fehlerinformationen liefert. Es gibt aber auch einen Hook von Contact Form 7, den wir wie folgt nutzen können:

function debug_cf7_add_error( $items, $result ) {

	if ( 'mail_failed' == $result['status'] ) {
		global $phpmailer;
		$items['errorInfo'] = $phpmailer->ErrorInfo;
	}

	return $items;
}
add_action( 'wpcf7_ajax_json_echo', 'debug_cf7_add_error', 10, 2 );

Wenn ein Fehler auftritt, dann lesen wir aus dem globalen $phpmailer Objekt den Fehler aus und fügen diesen an die AJAX-Antwort an. Anschließend können wir den Fehler im Frontend z.B. über die Developer-Tools von Chrome debuggen:

contact-form-7-debug

Fazit

Manchmal ist es wirklich nicht so einfach einen Fehler zu finden. Dann ist es gut, wenn das Plugin eine gute Debugging-Funktion bietet, um solche Fehler zu erkennen. Auch eine Validierung der Einstellungen beim Anlegen der Kontaktformulare hätte hier sehr geholfen.

Wie ihr das von meinem Adventskalender schon gewohnt sein solltest, habe ich euch natürlich auch wieder ein GIST mit einem Plugin erstellt, das ihr euch auch wieder einfach als ZIP-Datei runterladen und installieren könnt.

Solltet ihr ähnliche Fehler kennen und eine einfache Lösung parat haben, dann hinterlasst wie immer gerne einen Kommentar.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugin, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

19 Kommentare » Schreibe einen Kommentar

  1. Hallo Bernhard,

    ich habe mit Contact Form 7 ein Kontaktformular auf meiner Seite eingefügt. Beim Probe-Versand einer Email erhalte ich folgende Meldung “Beim Versuch, deine Mitteilung zu versenden, ist ein Fehler aufgetreten. Bitte versuche es später noch einmal.”
    Der Kundenservice von Host Europe hat mir gesagt, es habe einen Serverseitigen Fehler gegeben, der behoben sei. Dennoch bleibt es bei der Fehlermeldung.
    Im KIS habe ich die gleiche Email als Standardemail stehen, die ich in Contact Form 7 eingegeben habe (mail@hilfedurchhypnose.berlin). Das ist die Emailadresse zu meiner Homepage. Dort liegt der Fehler also offenbar auch nicht.
    Ich habe auch ein reCaptcha-Feld eingefügt und dachte es liegt daran, aber auch ohne das Feld funktioniert es nicht.
    Kann es vielleicht an der “.berlin”-Domain liegen?
    Ich bin wirklich ratlos, weil ich beim Durchforsten der Foren nicht weiterkomme. Ich bin auch nicht gut im Entschlüsseln der ganzen “Internetsprache”…

    Vielleicht fällt Dir ja was dazu ein?

    Danke schonmal und Gruß!
    Katrin

  2. Ehrlich gesagt weiß ich nicht, wie das geht. Ich Ich habe plugins bisher nur direkt über wordpress hochgeladen. Und dort finde ich Deines nicht… 🙁
    Ich bin echt ein Anfänger auf dem gesamten Gebiet, sorry!

  3. Hallo, ich bin es wieder. Ich kann Dein plugin leider nicht installieren, bekomme diese Meldung:

    Entpacken des Pakets…
    Das Paket konnte nicht installiert werden. PCLZIP_ERR_BAD_FORMAT (-10) : Unable to find End of Central Dir Record signature

    Inzwischen habe ich auch noch das “wp mail smtp” ´plugin installiert und bin genau nach Vorgabe durch die Punkte gegangen. Dann kam bei der Testmail wieder eine Fehlermeldung – dieses Mal in Form für mich kryptischer Zeichen, die ich leider nicht entschlüsseln kann -aber Du vielleicht? Danke für Deine Geduld!

    Test Message Sent

    The result was:

    bool(false)

    The full debugging output is shown below:object(PHPMailer)#12115 (75) {
    [“Version”]=>
    string(6) “5.2.14”
    [“Priority”]=>
    NULL
    [“CharSet”]=>
    string(10) “iso-8859-1”
    [“ContentType”]=>
    string(10) “text/plain”
    [“Encoding”]=>
    string(4) “8bit”
    [“ErrorInfo”]=>
    string(0) “”
    [“From”]=>
    string(14) “root@localhost”
    [“FromName”]=>
    string(9) “Root User”
    [“Sender”]=>
    string(0) “”
    [“ReturnPath”]=>
    string(0) “”
    [“Subject”]=>
    string(0) “”
    [“Body”]=>
    string(0) “”
    [“AltBody”]=>
    string(0) “”
    [“Ical”]=>
    string(0) “”
    [“MIMEBody”:protected]=>
    string(0) “”
    [“MIMEHeader”:protected]=>
    string(0) “”
    [“mailHeader”:protected]=>
    string(0) “”
    [“WordWrap”]=>
    int(0)
    [“Mailer”]=>
    string(4) “mail”
    [“Sendmail”]=>
    string(18) “/usr/sbin/sendmail”
    [“UseSendmailOptions”]=>
    bool(true)
    [“PluginDir”]=>
    string(0) “”
    [“ConfirmReadingTo”]=>
    string(0) “”
    [“Hostname”]=>
    string(0) “”
    [“MessageID”]=>
    string(0) “”
    [“MessageDate”]=>
    string(0) “”
    [“Host”]=>
    string(9) “localhost”
    [“Port”]=>
    int(25)
    [“Helo”]=>
    string(0) “”
    [“SMTPSecure”]=>
    string(0) “”
    [“SMTPAutoTLS”]=>
    bool(true)
    [“SMTPAuth”]=>
    bool(false)
    [“SMTPOptions”]=>
    array(0) {
    }
    [“Username”]=>
    string(0) “”
    [“Password”]=>
    string(0) “”
    [“AuthType”]=>
    string(0) “”
    [“Realm”]=>
    string(0) “”
    [“Workstation”]=>
    string(0) “”
    [“Timeout”]=>
    int(300)
    [“SMTPDebug”]=>
    bool(true)
    [“Debugoutput”]=>
    string(4) “echo”
    [“SMTPKeepAlive”]=>
    bool(false)
    [“SingleTo”]=>
    bool(false)
    [“SingleToArray”]=>
    array(0) {
    }
    [“do_verp”]=>
    bool(false)
    [“AllowEmpty”]=>
    bool(false)
    [“LE”]=>
    string(1) ”

    [“DKIM_selector”]=>
    string(0) “”
    [“DKIM_identity”]=>
    string(0) “”
    [“DKIM_passphrase”]=>
    string(0) “”
    [“DKIM_domain”]=>
    string(0) “”
    [“DKIM_private”]=>
    string(0) “”
    [“action_function”]=>
    string(0) “”
    [“XMailer”]=>
    string(0) “”
    [“smtp”:protected]=>
    NULL
    [“to”:protected]=>
    array(0) {
    }
    [“cc”:protected]=>
    array(0) {
    }
    [“bcc”:protected]=>
    array(0) {
    }
    [“ReplyTo”:protected]=>
    array(0) {
    }
    [“all_recipients”:protected]=>
    array(0) {
    }
    [“RecipientsQueue”:protected]=>
    array(0) {
    }
    [“ReplyToQueue”:protected]=>
    array(0) {
    }
    [“attachment”:protected]=>
    array(0) {
    }
    [“CustomHeader”:protected]=>
    array(0) {
    }
    [“lastMessageID”:protected]=>
    string(0) “”
    [“message_type”:protected]=>
    string(0) “”
    [“boundary”:protected]=>
    array(0) {
    }
    [“language”:protected]=>
    array(0) {
    }
    [“error_count”:protected]=>
    int(0)
    [“sign_cert_file”:protected]=>
    string(0) “”
    [“sign_key_file”:protected]=>
    string(0) “”
    [“sign_extracerts_file”:protected]=>
    string(0) “”
    [“sign_key_pass”:protected]=>
    string(0) “”
    [“exceptions”:protected]=>
    bool(true)
    [“uniqueid”:protected]=>
    string(0) “”
    }

    • Hallo Katrin,

      leider enthält die Meldung nicht wirklich eine Fehlermeldung. Aber zwei Dinge sind mir dennoch aufgefallen. Zuerst einmal steht als Absender (FROM) ein Wert von “root@localhost”. Dies sollte in der Regel eine echte E-Mail-Adresse sein. Außerdem ist der Host “localhost”, was auch eher ein Mailserver sein soll. Gerade bei der Verwendung von SMTP ist hier in der Regel ein Versand an “localhost” nicht möglich.

      Die Meldung mit dem Entpacken kann ich auch nicht nachvollziehen. Aber noch eine generelle Frage: Versuchst du den Versand der E-Mails in einer lokalen Installation? Dann kann hier nämlich schon das ganze Problem liegen. Viele lokale Installationen sind nicht richtig für den Versand von Mails eingerichtet. Und selbst wenn die Mail raus geht, wird sie wohl ein Mailserver direkt als Spam einstufen oder abweisen.

      • Hallo!
        Meine Webseite läuft über den Server von hosteurope. Ich bin mir nicht sicher, ob das die Frage beantwortet oder ob ich sie falsch verstehe…Tut mir leid, ich verstehe diese Sprache einfach nicht. Was die Emails angeht, kann ich nur sagen, dass ich ausschließlich “echte” Emailadressen verwende – mail@hilfedurchhypnose.berlin ist meine Adresse, die ich erreichbar machen will über das Kontaktformular. Die katrin.baetz@yahoo.de verwende ich privat und habe die zum Testen als Absender eingegeben. Wie kann ich denn dieses SMTP vermeiden? Ich habe einfach nur über WordPress das plugin hochgeladen und bin den Instruktionen gefolgt. Mehr kann ich dazu gar nicht sagen bzw. ich weiß nicht, wie/wo ich diese localhost-Sache beheben kann? Mein Webhoster ist wie gesagt hosteurope. Die haben angeblich alles soweit eingestellt, dass es funktionieren soll. Ach ja, jetzt habe ich noch ein anderes plugin probiert – Fast Secure Contact Form. Da bekomme ich auch eine Fehleranzeige im EmailLog:

        Im EmailLog steht “incorrect authentication data”

        Von: katrin
        An: mail@hilfedurchhypnose.berlin
        Antwort an: katrin.baetz@yahoo.de
        Datum: 2016-11-23 11:27:45
        Betreff: hilfedurchhypnose.berlin Kontakt: test
        Auslieferungs-URI: smtp:tls:plain://wp110.webpack.hosteurope.de:25

        An:
        Webmaster

        Name:
        katrin

        Email:
        katrin.baetz@yahoo.de

        Betreff:
        test

        Nachricht:
        test

        Von einem WordPress-Benutzer: katrin
        Email Adresse: mail@hilfedurchhypnose.berlin
        Angezeigter Name: katrin
        Gesendet von (IP-Adresse): 92.214.156.35
        (ipservice-092-214-156-035.092.214.pools.vodafone-ip.de)
        Datum/Zeit: 23. November 2016 11:27
        Gekommen von (referer): http://hilfedurchhypnose.berlin/kontakt/
        Benutzt (user agent): Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0)
        Gecko/20100101 Firefox/50.0

        • Ich nutze selbst ein Hosting von HostEurope, allerdings einen V-Server. Hier muss ich kein SMTP Plugin einsetzen. Es funktioniert bei korrekter Einstellung direkt mit Contact Form 7 bei korrekter Abesender-Adresse.

          Ich würde dir also zuerst einmal empfehlen das SMTP Plugin zu entfernen. Sollte das auch noch nicht klappen, dann wende dich am besten mal an den HostEurope Support, der ist bei so etwas eigentlich recht fit.

  4. Hallo Bernhard,

    cooler Beitrag. Ich komme allerdings bei mir immer noch nicht so ganz weiter. Folgendes Problem. Ich bin bis jetzt davon ausgegangen das mein Anfrageformular funktioniert. Nun musste ich per Zufall heute feststellen das es dass nicht immer tut.

    Wenn alle required fields ausgefüllt sind und auf Absenden gedrückt wird, steht unten immer die erfolgreich Versand Mitteilung. Soweit so gut… in den meisten Fällen bekomme ich dann auch die E-Mail mit den entsprechenden Daten korrekt. Aber bei 3 von 10 Fällen bekomme ich keine E-Mail. Diese steckt auch nicht im Junk fest… ich erhalte schlichtweg keine obwohl das Absenden erfolgreich war.

    Ich habe Contact Form DB installiert welcher alle Anfragen trackt… das macht dieses Plugin auch zuverlässig… trotzdem ist mir dass ein Rätsel… mir kommt es so vor als würde irgendein Filter gewisse Anfragen blockieren, dem Anwender und mir das aber nicht mitteilen. Da ich nun selbst ständig 10 Anfragen nach einander eingegeben hab könnte das ja irgendwie sein?

    Die Blacklist ist bei mir leer, das hatte ich schon geprüft… weißt Du vielleicht um welches Problem es sich hier handelt?

    Gruß Dominik

    • Hallo Dominik,

      also wenn die Mail in der DB ankommt und auch kein Fehler vorliegt, dann gehe ich auch mal davon aus, dass sie versendet wird. Allerdings kann es sein, dass der Zielserver sie schlicht nicht annimmt. Leider ist das Theme Mail/Spam ein sehr komplexes und ein echter Experte bin ich da auch nicht. Aber wenn auf deinem Server nicht alles korrekt eingestellt ist, MX-Record, Reverse-DNS, DMARC, etc. kann es eben zu Problemen beim Empfänger kommen. Hier kann dir vermutlich dein Hoster weiterhelfen.

      • Hallo Bernhard,

        danke für Deine schnelle Antwort. So wie ich das raushöre gehst Du also davon aus dass das Anfrageformular korrekt funktioniert und auch die Emails verschickt, aber mein Email Host
        quasi irgendwelche Probleme macht?!

        Vielen Dank vorab,

        Dominik

        • Das würde ich vermuten, wenn manchmal funktioniert und manchmal nicht. Wenn du eine GMX oder Web.de Adresse hast, versuche mal an eine davon zu schicken. Manchmal schicken die eine Antwort mit Details zum Fehler. Aber leider auch nicht immer.

  5. Hallo Bernhard,

    auf der Suche nach einer Lösung für mein Problem bin ich auf Deinen Blog gestoßen. Ich hoffe Du kannst auch mir helfen.

    Ich bin Neuling auf dem Gebiet und auch in der Entwicklersprache nicht ganz so zu Hause. Dies vorab 🙂

    Ich erstelle für einen Freund eine Website mit WordPress. Momentan läuft diese noch auf localhost. Hier habe ich das Plugin Contact Form 7 installiert. Beim Testlauf ist mir aufgefallen, dass zwar die Meldung kommt “Thank you for your message. It has been sent.” aber tatsächlich keine Email bei mir im Posteingang liegt. Auch nicht im Spam-Ordner. Es kommt einfach nichts an.

    Vielen Dank im Voraus und liebe Grüße aus Freiburg
    Sara

    • Hallo Sara,

      ein Mailversand von localhost ist immer schwierig. Sehr oft gehen die Mails gar nicht erst raus, wenn etwas falsch eingestellt wird oder der Mailserver des Empfänger lehnt sie gleich ganz ab (ohne sie im Spam-Ordner anzuzeigen). Das muss aber nicht heißen, dass die Mails auf dem Live-System nicht doch ankommen.

  6. Ich habe die gleiche Fehlermeldung bekommen. Die Lösung bei mir lag darin, dass ich auf mein Linux Server sendmail nachinstallieren sollte.
    Also einfach apt-get install sendmail
    Ich weiss nicht welche Email Programm die jeweiligen Host-Anbieter haben. Bei mir war das Programm sendmail
    Viel Erfolg

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.