Ticket #204 (closed Fehlermeldung: fixed)

Opened 3 years ago

Last modified 3 years ago

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

CommentModeration-patch-for-jlog1.1.3.diff Download (944 bytes) - added by driehle 3 years ago.
Akismet-patch-for-jlog1.1.3.diff Download (554 bytes) - added by driehle 3 years ago.

Change History

comment:1 Changed 3 years ago by jeena

  • Owner set to jeena
  • Status changed from new to assigned

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?

comment:2 Changed 3 years ago by driehle

  • Milestone set to Jlog 1.1.2

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…

Changed 3 years ago by driehle

comment:10 follow-up: ↓ 11 Changed 3 years ago by driehle

  • CommentModeration.jplug.php

     
    8989         */ 
    9090        function hook_adminMail($mail, $blogentry) { 
    9191                $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) 
    9596                { 
    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" . 
    10099                                        JLOG_PATH . '/admin/plugin.php?jplug=CommentModeration&allow=' . 
    101100                                        $matches[0]; 
     101                        $mail->setText($text); 
    102102                } 
    103103 
    104104                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

     
    6262                } 
    6363                 
    6464                function hook_commentorMail($mail, $blog) { 
    65                         if($this->actual_spam) $mail['nomail'] = true; 
     65                        if($this->actual_spam) $mail->dropMail(); 
    6666                        return $mail; 
    6767                } 
    6868 
    6969                function hook_adminMail($mail, $blog) { 
    70                         if($this->actual_spam) $mail['nomail'] = true; 
     70                        if($this->actual_spam) $mail->dropMail(); 
    7171                        return $mail; 
    7272                } 
    7373 

Changed 3 years ago by driehle

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.

Note: See TracTickets for help on using tickets.