Ticket #204 (closed Fehlermeldung: fixed)
Update Jlog 1.1.1: Bestätigungsmails werden nicht mehr versendet...
| Reported by: | Maik | Owned by: | jeena |
|---|---|---|---|
| Priority: | major | Milestone: | Jlog 1.1.3 |
| Component: | Kernfunktion | Version: | 1.1.2 |
| Keywords: | Cc: |
Description
Moin. Ich hab festgestellt, dass nach dem Update auf 1.1.1 die Bestätigungsmails bei Kommentaren aus irgendeinem Grund nicht mehr versendet werden. Die Konfiguration ist soweit unverändert...
Merci,
Maik
Attachments
Change History
comment:3 Changed 3 years ago by Maik
Nein, keine speziellen Zeichen.
Es ist im Mail-Log und dem MailError?-Log nichts zu finden. Scheint also ganz so, als würde die Mail schon in dem entsprechenden Modul geblockt. In welchem Modul wird die Bestätigungsmail denn verarbeitet und versendet?
Vorher hatte ich glaube ich V. 1.0.2
Merci,
Maik
comment:4 Changed 3 years ago by driehle
- Status changed from assigned to closed
- Resolution set to worksforme
Leider ist es keinem von uns gelungen dein Problem nachzuvollziehen. Möglicherweise stimmt da was mit deiner PHP oder Mailserver Konfiguration nicht.
comment:5 Changed 3 years ago by info@…
Nach längerem Experimentieren habe ich eine Lösung für das Problem gefunden.
Während ich mit diversen Kombinationen experimentiert habe um herauszufinden, welcher Teil der Funktion in der Log.php nicht funktioniert ist einmal kurz die Fehlermeldung:
Warning: mail(): SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE
aufgeblitzt (natürlich erst nach dem 256ten Versuch). Und das war's.
Es liegt tatsächlich am fünften Parameter, der per SafeMode? deaktiviert ist.
folgender Code in Zeile 201 rsp. 228 funktioniert:
if(empty($mailnomail?)) @mail(JLOG_EMAIL, $mailtopic?, $mailtext?, $mailheaders?);
(ohne "-f..." am Ende der Mail-Funktion).
da es ja einige Provider gibt, die PHP im SafeMode? laufen lassen, solltet Ihr Euch da eine Alternative ausdenken...
Viele Grüße,
Maik
comment:6 Changed 3 years ago by Maik
...mittlerweile habe ich nun meinen Provider gebeten die SafeMode?-Einstellung zu ändern und es funktioniert nun mit dem Originalscript.
M.
comment:7 Changed 3 years ago by driehle
- Status changed from closed to reopened
- Version changed from 1.1.1 to 1.1.2
- Resolution worksforme deleted
- Milestone Jlog 1.1.2 deleted
Danke für den Hinweis, den -f Parameter für Sendmail hatte Jeena aufgrund von #184 in [1729] eingebaut - offensichtlich ist dies aber noch nicht der Weisheit letzter Schluss.
Andererseits ist der Safe-Mode ja eigentlich ein Relikt aus vergangenen Zeiten und wird in PHP 6 nicht mehr existieren. Solange würde ich folgende Alternativlösung vorschlagen:
if (ini_get('safe_mode') == 1 || strtolower(ini_get('safe_mode')) == 'on') {
mail(JLOG_EMAIL, $mail['topic'], $mail['text'], $mail['headers']);
}
else {
mail(JLOG_EMAIL, $mail['topic'], $mail['text'], $mail['headers'], '-f'.JLOG_EMAIL);
}
Aus dem Manual-Eintrag zu ini_get() bin ich allerdings noch nicht ganz schlau geworden:
Note: When querying boolean values
A boolean ini value of off will be returned as an empty string or "0" while a boolean ini value of on will be returned as "1". The function can also return the literal string of INI value.
Klingt so, als ob die Rückgabe Plattform- oder Versionsabhängig wäre - aus diesem Grund habe ich oben zwei Vergleiche eingebaut, müsste allerdings noch getestet werden.
comment:8 Changed 3 years ago by driehle
- Priority changed from minor to major
- Milestone set to Jlog 1.1.3
comment:9 follow-up: ↓ 12 Changed 3 years ago by driehle
Habe das in [1779] implementiert, durch Einführung einer neuen Klasse Jlog_Mail, welche zum Versand von E-Mails gedacht ist.
Dadurch bedingte Änderungen:
- hook_adminMail hat als Parameter nun ein Object von Jlog_Mail, kein Array mehr
- hook_commentorMail hat als Parameter nun ein Object von Jlog_Mail, kein Array mehr
Um den Versand von E-Mails zu unterbinden, bringt Jlog_Mail eine Methode dropMail() mit. Dies ersetzt das alte Flag noemail.
Das Plugin CommentModeration muss deshalb aktualisiert werden, einen Patch für dieses Plugin hänge ich gleich noch an.
Übrigens ist das Plugin aufgrund der dortigen Verwendung von strrpos() nicht PHP 4 fähig…
comment:10 follow-up: ↓ 11 Changed 3 years ago by driehle
-
CommentModeration.jplug.php
89 89 */ 90 90 function hook_adminMail($mail, $blogentry) { 91 91 $trashURL = '/admin/comments.php?action=trash&id='; 92 $matches = array(); 93 94 if (($pos = strrpos($mail['text'], $trashURL)) !== FALSE) 92 $matches = array(); 93 $text = $mail->getText(); 94 95 if (($pos = strrpos($text, $trashURL)) !== FALSE) 95 96 { 96 $rest = substr($mail['text'], $pos); 97 98 if (preg_match('/([0-9]+)/', $rest, $matches)) 99 $mail['text'] .= "\n\nKommentar genehmigen\n" . 97 if (preg_match('/([0-9]+)/', $text, $matches, null, $pos)) 98 $text .= "\n\nKommentar genehmigen\n" . 100 99 JLOG_PATH . '/admin/plugin.php?jplug=CommentModeration&allow=' . 101 100 $matches[0]; 101 $mail->setText($text); 102 102 } 103 103 104 104 return $mail;
comment:11 in reply to: ↑ 10 ; follow-up: ↓ 13 Changed 3 years ago by robertb
Funktioniert das Plugin überhaupt noch nach dieser Änderung:
Replying to driehle:
- $rest = substr($mail['text'], $pos);
-
- if (preg_match('/([0-9]+)/', $rest, $matches))
- $mail['text'] .= "\n\nKommentar genehmigen\n" .
+ if (preg_match('/([0-9]+)/', $text, $matches, null, $pos))
+ $text .= "\n\nKommentar genehmigen\n" .
Die Mimik mit substr und $rest habe ich bewusst durchgeführt, damit ich eben genau die ID des Kommentars bekomme. Wenn wir eh gerade bei Jlog 1.1.3 sind, können wir dem Hook die Kommentar-ID auch als Argument übergeben, dann brauche ich auch strrpos nicht mehr.
comment:12 in reply to: ↑ 9 ; follow-up: ↓ 14 Changed 3 years ago by robertb
Replying to driehle:
Ein weiteres Plugin, das angepasst werden muss, ist plugins/akismet.
comment:13 in reply to: ↑ 11 Changed 3 years ago by driehle
Replying to robertb:
Die Mimik mit substr und $rest habe ich bewusst durchgeführt, damit ich eben genau die ID des Kommentars bekomme. Wenn wir eh gerade bei Jlog 1.1.3 sind, können wir dem Hook die Kommentar-ID auch als Argument übergeben, dann brauche ich auch strrpos nicht mehr.
Die ID hast du doch auch bei meiner Änderung nach wie vor in $matches[1] - ich verstehe dein Problem nicht ;-)
comment:14 in reply to: ↑ 12 Changed 3 years ago by driehle
Für das Akismet-Plugin schlage ich folgende Änderungen vor:
-
AkismetPlugin.jplug.php
62 62 } 63 63 64 64 function hook_commentorMail($mail, $blog) { 65 if($this->actual_spam) $mail ['nomail'] = true;65 if($this->actual_spam) $mail->dropMail(); 66 66 return $mail; 67 67 } 68 68 69 69 function hook_adminMail($mail, $blog) { 70 if($this->actual_spam) $mail ['nomail'] = true;70 if($this->actual_spam) $mail->dropMail(); 71 71 return $mail; 72 72 } 73 73
comment:15 Changed 3 years ago by driehle
- Status changed from reopened to closed
- Resolution set to fixed
Habe die beiden vorgestellten Patches nun mit [1787] eingespielt.


Hm, sorry kann ich so nicht nachvollziehen, habe das gerade noch mal getestet und alles funktioniert wie es sollte.
Hast du irgend etwas besonderes bei den Mails wie irgendwelche "komischen" Zeichen drinn die irgendwas kaputtmachen könnten? Welche Version hattest du denn vorher?