Massmail-Probleme

sternchen8875

Quote from: masju on January 06, 2023, 08:10:58 AM
Vielleicht laden wir die lauffähige Version nach dem ersten größerem "Feldtest" mal hier ins Forum hoch?

Sicherlich nicht in dieser Version, sie entspricht in Aufbau und Funktion nicht mehr dem, was eigentlich für WB spricht. Hat es eigentlich nie, aber vor 10 oder 15 Jahren hat sich nie jemand über das Nichteinhalten eigener Regeln aufgeregt, hier im Speziellen die Abhängigkeit zweier Addons voneinander. Newsletter nicht ohne Massmail und umgekehrt.

Heute gibt es andere Regeln, nicht nur bei WB, auch allgemein. Man darf z.b. nur Newsletter schicken, wenn der Empfänger dies ausdrücklich gewünscht und idealerweise auch per Double OptIn bestätigt hat. Dazu kommt die DatenschutzGrundverordnung, es braucht also eine User-Verwaltung, die über das direkte Anschauen in der Datenbank hinausgeht. Sind z.b. die Mailadressen nicht mehr aktuell, weil man Löschanträgen nicht nachgekommen ist und landen die dann im Spam des ehemaligen Interessenten, zählt der Provider schon mit und irgendwann steht man dann auf einer Blacklist
Dann hat jeder Provider eigene Tips zum Newsletterversand, damit das Ganze nicht zum Schuß ins Knie wird. Mein Stamm-Provider schreibt z.b. nur max 25 Mail in 5 min oder 250 Mails in 10 min, die man dann halt in Stößen senden müßte. Dazu muß klar sein, das der Provider / jeder Provider auch den Inhalt des Newsletters checkt. Ein Wichtig! mit 25 Ausrufezeichen ist da schon verdächtig, ein Bild ohne Text ebenso. Das muß man schon bedenken, wenn man z.b. einen bebilderten Feiertagswunsch sendet ähnlich dem Gruß zum Feste hier vor ein paar Tagen.
Nicht umsonst lagern viele solche Newsletter auf externe Anbieter aus, kostet halt Geld, aber das Risiko, das nicht nur die Mailadresse, sondern, im WorstCase, die komplette Domain geblacklistet und dann gesperrt wird, ist damit schon mal erledigt.

Was du als Reparatur bekommen hast, war "Erste Hilfe", damit läuft das Massmail-Modul mindestens so lang, wie die PHP-Version 8.1 oder älter aktiv ist.
Die Frage ist: lohnt es sich überhaupt, da Arbeit reinzustecken? Sind überhaupt noch User da, die das Modul nutzen?

Ich hab die letzten Tage mal eine moderne 1:1-Kopie davon erstellt, Code und Design getrennt, aktuelle Coding-Standards usw.
Hab ein paar Fragezeichen, was hinter der "Logik" beim Ein- und Austragen von Mailadressen stecken soll, weil man dort aber eh etwas ändern müßte, das die Adressverwaltung betrifft, würde sich das von alleine klären. Vielleicht schaut man auch mal über den Tellerrand, wie das z.b. Wordpress löst. Damit mein ich weniger den Code, eher das Backend-Handling.

Noch garnicht angeschaut hab ich mit das dazugehörige Newsletter-Modul, das am Ende den Versand übernimmt. Lt. Changelog war da die letzte Änderung die Umstellung von PHP-Mail auf die WB-eigene Mailroutine.
Wie oben angeführt, soll es die Abhängigkeit zweier Module nicht geben und es gäbe da sicher Möglichkeiten, beide zu vereinen, aber am Ende investiert man da ein paar Wochen und niemand braucht es mehr

Entsprechend der DSGVO müßtest du deine ganzen Empfänger rauswerfen und sie bitten, sich neu anzumelden, um die DSGVO zu bestätigen. Erfahrungsgemäß machen das dann nur einige Wenige und meist auch nur, wenn das Thema passt. Die 10 Leute der örtlichen Feuerwehr bekomm ich mit Sicherheit überzeugt, von 300 Mitgliedern einer Kirchengemeinde werden anfangs nur 20 - 30 auf eine Bitte zur Neuanmeldung reagieren. Rein von der DSVGO her darf ich sie ja nicht mal anschreiben, um sie darauf hinzuweisen.
Mit einer neuen Modulversion würde ohne DSVGO-Zustimmung nicht ein Newsletter versendet werden.
Und hast du auf der Webseite noch das alte Newsletter-Anmeldeformular, kann dich jeder Dussel abmahnen, also eine Zwickmühle. Schick ich meinen Kids + Anhang einen alten Newsletter, werden die mich sicherlich nicht abmahnen und denen könnte ich auch eine Mail schicken mir der Bitte um Bestätigung der DSVGO, geht aber nicht bei unbekannten Abonnementen, da ist jeder ein potentieller Abmahner.

Bei deiner Version mit dem Pflaster drauf würde sie mit den aktuell bekannten PHP-Versionen sicherlich mindestens zwei weitere Jahre laufen, wenn sich mit PHP 8.2.x nichts Grundlegendes ändert, was ich auf das Modul bezogen annehme, dann auch drei Jahre.
Drei Jahre ohne Massmail-Streß - würdest du dafür auf eine neue Version updaten und auf eine Neuanmeldung der Newsletter-Interessenten hoffen?

Rein technisch gibt es dann noch andere Fragen. Bleibt man upgrade-fähig oder baut man ein neues, eigenständiges Modul. Beides hätte Vor-und Nachteile. Zum ersten habe ich die Daten im alten Modul, Adressen und Letter-Inhalte.
Das neue Modul würde bei einer Neuanmeldung einen Bestätigungslink versenden, der dann 24, 48 oder 72 Stunden gültig ist und eine temporäre also noch unbestätigte Mailadresse danach rauslöschen. Diese Technik würde also in max drei Tagen deinen kompletten alten Adresspool löschen, weil da ja überhaupt nichts bestätigt ist.

Ist immer eine schwierige Frage, ob sich der Aufwand lohnt. Bei anderen Addons kann man immer sehen, es findet schon seine Downloader, wenn es erstmal public ist. Aber Massmail war immer schon ein Kind, das etwas abseits stand. Ein paar wenige Überzeugte, aber viel mehr Ablehner, weil eben viel Schindluder getrieben wurde mit Newslettern, die man wirklich oder auch nur angeblich abonniert hatte.

masju

Ja, vielen Dank für die Hilfe per PM (Y) :-). Vielleicht laden wir die lauffähige Version nach dem ersten größerem "Feldtest" mal hier ins Forum hoch?

Viele Grüße
masju

sternchen8875

Das "Problem" wurde übrigens noch im alten Jahr geklärt  :-)

sternchen8875

na keine, die unterm Weihnachtsbaum lag.
Hab aktuell die Bude voll, die meisten bleiben bis nach Neujahr.

Ich befürchte ja, das es eine Kette ohne Ende wird. Das Meiste darin ist über 10 Jahre alt und die letzten Änderungen stammen aus 2018

masju

Ich bekomme es leider nicht gefixt. Hättest Du eventuell eine Lösung parat?

sternchen8875

gesehen und reproduziert - Danke  (Y)

Das Script verliert da wohl die Gruppen-ID beim Reload

masju

Den Fehler erhalte ich reproduzierbar, wenn ich im Backend (Modul massmail) im Bereich "Massenmail senden" im Pulldown "Mailgruppe auswaehlen:" die Mailgruppe wechsle.
Der Versand ohne Auswahl der Mailgruppe klappt anscheinend.

sternchen8875

ist angekommen, Danke dafür!!

Kannst du in etwa sagen, wann du diesen is_group_match-Fehler bekommst?
Hab mir beide Module mal installiert mit PHP 8.1.9 und der aktuellsten Testversion. Bis auf die üblichen Korrekturen mit den Templates und der UserId, die die neuen WB-Versionen erfordern, und die Warnings, die auf Abfragen ohne Ergebnis beruhen, der Rest sind undefinierte Werte. Allerdings bin ich in der Testumgebung nur SingleUser, d.h. ich muß mir erst einmal ein paar User anlegen, mit denen ich probieren kann und dann Schritt für Schritt.

Eine neuere Version hab ich leider auch nicht.
Was ich immer schon mal fragen wollte dazu: Macht es Sinn, ältere, bereits verschickte Newsletter-Inhalte auf einer Seite im Frontend anzuzeigen oder dient das eher der internen Übersicht für den Anwender, z.b. auf einer Seite, die den Status "privat" hat?


masju

Oh super, vielen Dank für die sehr ausführliche Antwort. Ich pfusche natürlich nicht am Core herum  :wink:
Vielleicht ist tatsächlich das Newsletter-Modul der Auslöser.
Es gibt keinen "ersten Teil der Fehlermeldung", sie wird direkt im Backend angezeigt. Aber ich habe gerade im Error-Log (hätte ich ja gleich mal schauen sollen) noch ein paar Einträge gefunden:
QuoteWed, 21 Dec 2022 10:52:39 +0000 [E_WARNING] /modules/massmail/modify.php:[122] from /admin/pages/modify.php:[249] require "Undefined array key """
Wed, 21 Dec 2022 10:52:39 +0000 [E_WARNING] /modules/massmail/modify.php:[122] from /admin/pages/modify.php:[249] require "Undefined array key """
Wed, 21 Dec 2022 10:52:39 +0000 [E_WARNING] /modules/massmail/modify.php:[122] from /admin/pages/modify.php:[249] require "Undefined array key """
Wed, 21 Dec 2022 10:52:39 +0000 [E_WARNING] /modules/massmail/modify.php:[277] from /admin/pages/modify.php:[249] require "Undefined array key "USERS""
Wed, 21 Dec 2022 10:52:39 +0000 [E_WARNING] /modules/massmail/modify.php:[277] from /admin/pages/modify.php:[249] require "Trying to access array offset on value of type null"
Wed, 21 Dec 2022 10:52:39 +0000 [E_WARNING] /modules/massmail/modify.php:[302] from /admin/pages/modify.php:[249] require "Undefined variable $users_id"
Wed, 21 Dec 2022 10:52:39 +0000 [E_WARNING] /modules/massmail/modify.php:[364] from /admin/pages/modify.php:[249] require "Undefined variable $cc""
Sind allerdings nur "Warnings". Ich schicke Dir die beiden verwendeten Module newsletter (v0.21) und massmail (v2.3.7) gerne mal als PN, danke für Dein Hilfsangebot  (Y). Vielleicht sind Deine Module ja aktueller? In der Repo ist nichts mehr zu finden.

Viele Grüße
masju

sternchen8875

Hab mal meine Platte durchsucht und einige ältere Versionen gefunden. Die jüngste davon lief mit PHP 7.4.x, danach wurde die MassMail in diesem Projekt eingestellt, weil man ja immer an der Grenze zum Spam-Mailer sitzt. Und mit der härteren Umsetzung der DSVGO muß man dann noch diverse Umbauten machen, um eine MassMail und dessen Anmeldung abmahnsicher zu gestalten.

In den Versionen, die mir vorliegen, wird solche Abfrage nicht über die erwähnte Funktion is_group_match() ausgeführt. Diese Funktion ist im Modul auch nicht enthalten. Daraus ergeben sich zwei Fragen

#1 Wurde das Modul vielleicht schon umgebaut?

#2 Ist wirklich das Modul "MassMail" der Auslöser für deine Fehlermeldung? Das könnte vielleicht der von mir vermißte erste Teil der Fehlermeldung beantworten.

MassMail selbst ist ja nur das Verwaltungsprogramm für die Mails und braucht auch immer des Newsletter-Modul, um zu funktionieren.
Könntest du die beiden Module mal zur Verfügung stellen (hier oder auch gern per PN)?

Abhängigkeiten von Modulen waren eigentlich schon immer verpöhnt bei WB. Wundert mich, das aus den zwei Modulen nie ein Einziges gemacht wurde.
Der Bedarf ist mittlerweile wohl fast gegen Null.

sternchen8875

Quote from: masju on December 20, 2022, 02:18:09 PM
Da ich mich nun überhaupt nicht an die Modifikation des Cores wage,

das wäre auch gut so. Genannte Funktion is_group_match() ist eine der zentralen Core-Funktionen, das heißt u.a., sie wird vom WB-Kern für diverse mögliche Funktionen im Core oder in Modulen zur Verfügung gestellt, damit sie nicht zig-fach neu definiert werden muß.
WB ist wohl OpenSource, aber wer solche zentralen Funktionen ändert, muß sich nicht wundern, wenn diese Installation dann Schrott ist oder (noch schlimmer) durch solche Anpassungen zu einem für Angreifer offenem Scheunentor wird.
Reicht das als Steinigung?  :-P

Zu deiner Frage, was da passiert:

#1 die Fehlermeldung ist nicht komplett, darum sieht man den Auslöser des Problems nicht. Offensichtlich wird aber an anderer Stelle (dein massmail-Modul?) diese Funktion mit zwei Werten aufgerufen. Diese ist dann der Auslöser.
#2 ein Blick in die Kommentare der class.wb.php in die Zeilen vor dieser Funktionsdefinition sollte schon verraten, was da passiert. Verglichen werden zwei Array's oder komma-separierte Listen, die, wie der Name schon sagt, die Gruppenzugehörigkeit betreffen.
Hauptsächlich wird damit geprüft, ob der User aus Liste 1 Mitglied in Gruppe 2 ist, z.b. um dir das Bearbeiten von Beiträgen zu erlauben.

Im Speziellen sagt deine Fehlermeldung, das ein String erwartet wird, aber ein Integer Wert geliefert wurde. Mit der Funktion preg_split() werden dann die dort definierten Zeichen aus dem String entfernt, damit am Ende nur "saubere" Werte verglichen werden können.
In den allermeisten Fällen ist die eigentliche Funktion dann nur das letzte Glied in der Kette. Ich würde hier prüfen, was hier an Werten für diese Funktion übergeben wird

masju

Hallo liebe Gemeinde,

bitte steinigt mich nicht :wink:, ich versuche ein älteres Modul (massmail) zum Laufen zu bekommen auf der aktuellen WB 2.13.2 r133 unter PHP 8.1. An einer bestimmten Stelle erhalte ich die Fehlermeldung
QuoteThere was an uncatched exception
preg_split(): Argument #2 ($subject) must be of type string, int given
in line (307) of (/framework/class.wb.php):

Da ich mich nun überhaupt nicht an die Modifikation des Cores wage, traue ich, mal die Frage an die Experten hier zu stellen, was an dieser Stelle in der class.wb.php überhaupt passiert?
public function is_group_match($mGroupsList1 = '', $mGroupsList2 = '', &$matches = null)
    {

        if ($mGroupsList1 == '' || $mGroupsList2 == '') { return false; }
        if (!\is_null($mGroupsList1) && !\is_array($mGroupsList1)) {
            $mGroupsList1 = \preg_split('/[\s,=+\-\;\:\.\|]+/', $mGroupsList1, -1, PREG_SPLIT_NO_EMPTY);
        }
        if (!\is_null($mGroupsList2) && !\is_array($mGroupsList2)) {
            $mGroupsList2 = \preg_split('/[\s,=+\-\;\:\.\|]+/', $mGroupsList2, -1, PREG_SPLIT_NO_EMPTY);
        }
        $matches = \array_intersect($mGroupsList1, $mGroupsList2);
        return (\sizeof($matches) != 0);
    }


Viele Grüße
masju