WordPress sendet keine E-Mails bei neuen Kommentaren – Die Lösung
Ich habe bis vor 2 oder 3 Wochen WordPress 3.0.5 verwendet. Als WordPress 3.1.2 herauskam, habe ich ein Update durchgeführt, da ich natürlich immer halbwegs auf dem aktuellen Stand sein möchte und keine unnötigen Sicherheitsrisiken eingehen will. Wie nach jedem Update teste ich erstmal, ob die Grundfunktionalitäten noch funktionieren (Startseite anzeigen, einzelne Artikel anzeigen, Archiv aufrufen, Suchfunktion, Adminbereich, Plugins, usw.) und spiele dann ggf. wieder die alte Version ein.
In meinem Fall hat jedoch anscheinend alles funktioniert und ich ließ die neue Version von WordPress auf meinem Server. Leider bemerkt man manche Bugs erst realtiv spät. So ging es mir nämlich dieses Mal!
Ein paar Hintergrundinformationen:
Ich habe auf allen meinen Blogs eingestellt, dass ich Kommentare erst genehmigen muss, bevor sie veröffentlicht werden. Der Ablauf war bisher immer so:
- Jemand schreibt einen Kommentar unter einem Artikel von mir
- Ich bekomme eine E-Mail mit dem beispielhaften Betreff „[Tipps und Tricks für Webmaster] Bitte moderiere: „Schlechte Eigenschaften von JavaScript und wie man sie umgeht„
- Wenn es Spam ist, markiere ich den Artikel als Spam oder lösche ihn gleich. Wenn nicht, wird er genehmigt („approve“)
- Danach bekomme ich eine E-Mail mit dem Betreff „[Tipps und Tricks für Webmaster] Kommentar: „Schlechte Eigenschaften von JavaScript und wie man sie umgeht„
Nach dem Update fiel jedoch Schritt 4 weg und ich konnte mir die Ursache nicht erklären. Nachdem ich den Kommentar genehmigt habe, bekam ich keine E-Mail mehr, dass ein neuer Kommentar geschrieben wurde. Manche denken sich jetzt wahrscheinlich, dass das doch gut so sei. Wer will schon doppelte E-Mails? (1x „Bitte genehmigen Sie“, 1x „Es gibt einen neuen Kommentar“). Ich handhabe das jedoch etwas anders. Ich gehe auf die allermeisten Kommentare ein, habe jedoch nicht immer Zeit, dies sofort zu tun. Deshalb genehmige ich die jeweiligen Kommentare meistens innerhalb von wenigen Minuten / Stunden und möchte sie später erst bearbeiten.
Hier ist es sehr nützlich, wenn zusätzlich noch eine E-Mail wie in Schritt 4 kommt, denn die lasse ich dann solange als ungelesen markiert, bis ich den Kommentar beantwortet habe. So fungiert mein Thunderbird gleichzeitig als ToDo-Liste, was sich in der Praxis als sehr nützlich erwiesen hat. Übrigens mache ich das nicht nur bei Kommentaren so, sondern mit allen Aufgaben, die so im Internet anfallen.
Gut, genug Hintergrundwissen! Als ich den Fehler bemerkt habe, habe ich zuerst meinen Hoster angeschrieben und gefragt, ob vielleicht einfach nur etwas an der Konfiguration geändert wurde, was den Fehler verursachen könnte. Dies hat All-Inkl.com verneint und sich die Logs angeschaut. Es gab nie ausgehende Mails mit dem gewünschten Betreff. Somit war auch mein Spam-Filter schonmal ausgeschlossen. Denn anscheinend lag es wirklich an WordPress.
Ich habe mich dann erst an das deutsche WP-Support-Forum gewendet und als auch dort keiner eine Lösung hatte, an das englische. In keinem der beiden Foren hatte man eine Idee, an was es liegen könnte. Daraufhin habe ich nochmal All-Inkl.com um Rat gebeten. Nun wurde mein gesamter Webspace auf einen neuen Server verlagert, um Serverprobleme auszuschließen. Doch leider war auch das nicht die Lösung!
Für mich war jetzt klar, dass es definitiv nur am Code von WordPress liegen könnte. Dass irgendwelche Plugins Schuld waren, habe ich schon davor ausgeschlossen, indem ich alle deaktiviert und dann erneut getestet habe, ob das gewünschte Verhalten eintritt.
Also musste ich in den sauren Apfel beissen und mich durch den Code von WordPress wühlen. Nach geschätzten 2 Stunden war das Problem dann lokalisiert und auch eine Lösung war nicht weit. Man muss einfach nur zwei Zeilen in der wp-includes/pluggable.php auskommentieren und schon ist der Fehler Vergangenheit.
// The author moderated a comment on his own post if ( $post->post_author == get_current_user_id() ) return false;
muss so umgeschrieben werden:
// The author moderated a comment on his own post //if ( $post->post_author == get_current_user_id() ) //return false;
Es handelt sich übrigens um Zeile 1018 – 1020. Danach ersetzt man einfach die alte pluggable.php mit der neuen und schon geht es! Die Zeilen sind dafür verantwortlich, dass derjenige, der den Kommentar genehmigt hat, nicht mehr benachrichtigt wird, dass es einen neuen Kommentar gibt.
Ein WinMerge-Diff zw. Version 3.0.5 und 3.1.2 zeigt die Änderungen:
Den Bug habe ich mal an das WordPress-Team gemeldet. Aber vielleicht ist es ja auch gar kein Bug, sondern ein Feature 😉
Ich hoffe, ich konnte Euch mit meinem Artikel weiterhelfen und Euch ersparen, dass Ihr Euch selbst durch den Code wühlen müsst!
Nachtrag vom 3.6.2011
Sieht so aus, als sei das wirklich kein Bug, sondern ein gewolltes Feature. Auf der Seite der Änderungen in WP 3.1 steht
Don’t notify the author when they posted or moderated the comment
unter dem Menüpunkt „Comments“. Und das von mir gewünschte Verhalten wurde schonmal als Bug gemeldet (Titel des Bugs: „Don’t fire wp_notify_postauthor() when the author moderated the comment“). Für mich ist das jedoch kein Bug, sondern einfach nur verdammt nützlich! Ein guter Kompromiss wäre doch, das zu einer Option im Adminbereich zu machen, so dass jeder selbst entscheiden kann, wie er es haben will.
Also dass der Code dann später so aussieht:
// The author moderated a comment on his own post if(!$options->notify_after_approval) if ( $post->post_author == get_current_user_id() ) return false;
Was haltet ihr davon? So wären alle glücklich und müssten nicht am Core von WordPress herumpfuschen. Beim nächsten Update muss ich den Code nämlich wieder anpassen….
Update vom 8.6.2011
Mein Bugreport wurde abgelehnt! Deshalb habe ich kurzerhand ein Plugin geschrieben, das den Bug behebt. Es heißt „Notify me!„, vielleicht hilft es euch ja! Alle Informationen dazu findet ihr direkt auf wordpress.org oder hier im Blog.
[…] « WordPress sendet keine E-Mails bei neuen Kommentaren – Die Lösung […]
Also das Diff von Winmerge ist ja mal nicht so hilfreich, da es links total anders aussieht als rechts (Zeilenumbrüche sind anders) und die Änderungen da nicht zu sehen sind. Etwa aus Versehen Umbrüche entfernt?
Und was wesentlich besser ist: Disqus.com
Zudem nutze ich nur noch Drupal was viel besser ist als WordPress
Und für dieses kleine Feature / Problem ein ganzes Plugin das den Speicherverbrauch noch weiter nach oben drückt, obwohl WordPress bereits viel zu viel Speicher frisst? (RAM)
Keine Ahnung, was da mit WinMerge schiefgelaufen ist, aber ich habe damit den Fehler gefunden!
Was meinst du mit „Und was wesentlich besser ist: Disqus.com“? Besser als was?
Zum Thema Drupal: Worin genau siehst du die Vorteile gegenüber WordPress (bei Blogs)?
Zum Thema Plugin: Wie hätte ich es denn sonst lösen sollen? Und Speicher braucht mein Plugin nicht (jedenfalls nur minimal), denn es besteht lediglich aus einer Funktionsdefinition, die höchstselten auch ausfgeführt wird.
Disqus ist wesentlich besser für Kommentare in WordPress und deren Verwaltung, probier es mal aus.
Habe mir das mal auf Wikipedia (http://de.wikipedia.org/wiki/Disqus) angeschaut und bin im Moment noch nicht so ganz sicher, ob ich es für gut halten soll. Die Kommentare sind dann nicht mehr auf meinem Server, sondern wo anders gespeichert und ich sehe auch nicht so viele Vorteile gegenüber dem herkömmlichen System von WordPress.
Aber ich behalte es auf jeden Fall im Hinterkopf, evtl. für Bildergalerien oder sowas. Da spart man sich das eigene Programmieren.
@Unwichtig: Ehrlich gesagt finde ich deinen Kommentar mal sowas von unhöflich. Hier hat jemand sich die Mühe gemacht ein Problem zu lösen ohne das bestehende System zu verändern (in dem Sinne andere Plugins zu integrieren wir Disqus). Klar, kann man darauf hinweisen, dass Disqus wirklich super in der der Administration ist und in der Schnittmenge zu Facebook etc, aber ansonsten hat dein Kommentar eigtl. mal gar nix mit diesem Blogeintrag zu tun… man könnte es Spam nennen, weil es nicht mehr aussagt als „interessiert doch niemanden, wp ist doch eh ****“. Auch dein Kommentar zu Drupal. Drupal ist doch wohl tausendmal schlimmer wenn es um Anpassungen geht. Es ist mit Drupal per se nicht möglich professionelle Templates zu erstellen, ohne am Core rumzupfuschen! Von daher gerade auf den Aspekt gesetzt völlig unpassend…
Aber da ich hier auch nicht spammen will 😉
Ich danke dir ganz herzlich für die Einsicht in dieses Problem, war zwar nicht direkt wonach ich gesucth habe, werde ich aber noch brauchen 🙂
Liebe Grüße,
SamiSalami
@SamiSalami: Danke für deinen Kommentar und Deine Unterstützung 🙂
Du schreibst „war zwar nicht direkt wonach ich gesucth habe“. Wonach hast Du denn gesucht?
Danke für Deinen Beitrag. Ich installierte heute Web Invoice und stellte fest, dass die Rechnungen per Email nicht verschickt werden. Das führte mich zur Einsicht, dass WP 3.3.1 keine Emails mehr verschickt.
Hat Deine Lösung nur Auswirkungen auf die Kommentare oder gibt es da ein zentraler Schalter, um den Emailversand zu reaktivieren? Früher hat es jedenfalls funktioniert. Weiss aber nicht, ab welcher Version nicht mehr.
Gruss aus dem Berner Oberland
Martin
Hallo Martin
leider hat mein Plugin nur auf die Kommentare Auswirkungen und hilft dir bei deinem Problem nicht weiter.
WebInvoice kenne ich selbst nicht, aber ich denke, dass der Fehler eher am Plugin direkt oder am Server liegt. Hast du die aktuellste Version von Webinvoice installiert? Falls ja, dann frag mal bei deinem Provider nach, ob es da Probleme mit dem Mailserver gibt.
Wenn alles nicht hilft, schreib ins Supportforum von WP 🙂
Falls Du den Fehler gefunden hast, würde mich und andere Leser interessieren, an was es lag!
Grüße aus Baden
Simon