PHP 8 Fatal Error (Type Error) in Email.php bei fehlgeschlagenem SMTP-Versand (Version 5.0.6)

Hast du einen Fehler in der aktuellen Version gefunden ? Diesen kannst du uns hier mitteilen und uns bei der Fehlersuche helfen.
Antworten
muellermanu
Beiträge: 122
Registriert: 27. Feb 2009, 00:02
Wohnort: Schönau a.d. Brend
Kontaktdaten:

PHP 8 Fatal Error (Type Error) in Email.php bei fehlgeschlagenem SMTP-Versand (Version 5.0.6)

Beitrag von muellermanu »

Hallo zusammen,

ich nutze Admidio in der Version 5.0.6 auf einem Server mit PHP 8.3.30 und bin auf einen kritischen Fehler gestoßen. Wenn der E-Mail-Versand (z. B. beim Speichern einer neuen Veranstaltung) fehlschlägt, stürzt das gesamte Skript mit einem Fatal Error ab, anstatt eine reguläre Fehlermeldung anzuzeigen.

Fehlermeldung:
Exception::__construct(): Argument #2 ($code) must be of type int, array given in /.../src/Infrastructure/Email.php on line 830

Analyse:
In der Datei src/Infrastructure/Email.php wird in Zeile 830 versucht, eine Exception zu werfen, wenn der Mailversand nicht erfolgreich war:

PHP
throw new \Admidio\Infrastructure\Exception('SYS_EMAIL_NOT_SEND', array($gCurrentOrganization->getValue('org_email_administrator'), $returnCode));
Das Problem ist, dass die Exception-Klasse unter PHP 8 als zweiten Parameter zwingend einen Integer erwartet. Admidio übergibt hier jedoch ein Array, welches die Webmaster-E-Mail und den eigentlichen Fehlercode enthält. Dies führt zum sofortigen Abbruch (Error 500/503) und verhindert zudem das Speichern der Veranstaltung in der Datenbank (Rollback der Transaktion).

Workaround / Fix:
Ich konnte das Problem vorerst beheben, indem ich den zweiten Parameter explizit zu einem Integer umgewandelt habe:

PHP
throw new \Admidio\Infrastructure\Exception('SYS_EMAIL_NOT_SEND', (int)$returnCode);
(Hinweis: Hierbei gehen allerdings die Parameter für die Sprachdatei verloren, was zu Platzhaltern wie #VAR1# führt, aber den Absturz verhindert.)

Desweiteren dem E-Mailversand con SMTP auf PHP() umgestellt habe.

Es wäre toll, wenn dies in einer zukünftigen Version PHP-8-konform gelöst werden könnte, sodass die Exception das Array korrekt verarbeitet oder die Sprachparameter anders übergeben werden.

System-Umgebung:

Admidio-Version: 5.0.6

PHP-Version: 8.x

Webserver: Apache/Nginx (Plesk Umgebung)

Betroffenes Modul: Veranstaltungen (events_function.php)

Vielen Dank
Manu
Gruß Manu
Antworten