PHP-Warning beim Versenden von Newsletter

Diskussion zum Modul Newsletter für ConPresso 4
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 846
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

PHP-Warning beim Versenden von Newsletter

Beitrag von hscha »

Hallo Markus,
beim Versenden eines Newsletter mit eingebundenen Bildern bekomme ich für jede Empfängeradresse die folgende php-Warnung:

Code: Alles auswählen

[05-Apr-2025 15:21:25] PHP Warning:  foreach() argument must be of type array|object, string given in /www/htdocs/.../gesangskreis-wichern-radeland.de/cms/mod_newsletter/includes/inc_img_add.inc.php on line 36
Die Bilder habe ich über das Newsletter-Style-Sheet eingebunden, damit es funktioniert...

Der Versand klappt und die Mails gehen raus. Es bleiben jedes Mal diese Warnungen - ignorieren?
Ich verwende Modul Newsletter 4.4a "Forest Green" unter php 8.3 und CPO "Wild Horses".

Grüße aus Berlin von
Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

Muss ich mir in Ruhe anschauen, aber bist Du Dir sicher, dass die Bilder mitversendet werden und nicht nur via Link aus dem Netz geladen werden? Mailgröße und Quelltext geben da Aufschluss, oft auch eine Büroklammer am Mail...

IMHO werden Bilder aus dem CSS-Stylesheet NICHT ins Mail gepackt, daher wohl auch die Fehlermeldung.
Allerdings verwunderlich, dass $bilder überhaupt einen Inhalt hat und das ein String sein soll...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

Ein Test mit Deiner Newsletter-Vorlage zeigt, dass KEINE Bilder eingebettet werden, da es ja auch keine Bilder im Newsletter-Artikel gibt.

Enthält der Artikel Bilder (wie mein Test-Newsletter), dann werden sie auch eingebettet (siehe Screenshots).
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 846
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von hscha »

Stimmt, die übers Stylesheet eingebundenen Bilder werden vom Server geladen...
Gleichzeitig:
Auch bei deinem Test-Newsletter gibt's die gleiche php-Warning (siehe php-Fehler-Log)...

Danke für's Nachschauen!
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

Sicherlich ist es mein Fehler, dass nicht geprüft wird, ob bei Auswahl von Bilder einbetten = Ja sich überhaupt einzubettende Bilder in den Artikelinhalten befinden.
Die Fehlermeldung müsste aber eigentlich ganz anders lauten, wenn nicht an anderer Stelle (z.B. global_header) die Variable $bilder benutzt wird. Da der FTP-Zugang aber nicht funktioniert, kann ich das nicht prüfen...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

hscha hat geschrieben: 10.04.2025 14:51 Auch bei deinem Test-Newsletter gibt's die gleiche php-Warning (siehe php-Fehler-Log)...
Komisch, genau das hatte ich getestet und im PHP-Fehler-Log kontrolliert:
Zweimal Dein Newsletter ohne Bild -> 2 Fehler
Einmal mein Newsletter mit Bild -> kein Fehler

Oder siehst Du einen Fehler-Eintrag von 14:26 Uhr bzw. 14:27 Uhr???? (die Mails brauchen ca. 1 Minute)

Code: Alles auswählen

[14:39:44] PHP Warning:  foreach() argument must be of type array|object, string given in /www/htdocs/w015a919/gesangskreis-wichern-radeland.de/cms/mod_newsletter/includes/inc_img_add.inc.php on line 36
[13:58:38] PHP Warning:  foreach() argument must be of type array|object, string given in /www/htdocs/w015a919/gesangskreis-wichern-radeland.de/cms/mod_newsletter/includes/inc_img_add.inc.php on line 36
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

BTW:
Theoretisch könnte man auch in einem CSS die URL-Angabe mit einer CID belegen (also eine mitgesendete Grafik benutzten), aber das scheinen wichtige Clients wie Firebird nicht zu unterstützen, bzw. der zugehörige Bug-Report besteht seit 23 Jahren und wird wohl nie erledigt werden
https://bugzilla.mozilla.org/show_bug.cgi?id=154836
https://bugzilla.mozilla.org/show_bug.cgi?id=254015
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 846
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von hscha »

Die Fehlermeldung müsste aber eigentlich ganz anders lauten, wenn nicht an anderer Stelle (z.B. global_header) die Variable $bilder benutzt wird. Da der FTP-Zugang aber nicht funktioniert, kann ich das nicht prüfen...
Ich habe den FTP-Zugang wieder aktiviert. Du kannst ja mal nachschauen. Ich habe keine Variable $bilder außerhalb von mod_newsletter gefunden...

Grüße von Horst

P.S.: Das mit der CID habe ich nicht verstanden...
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

hscha hat geschrieben: 10.04.2025 21:07 P.S.: Das mit der CID habe ich nicht verstanden...
Das sieht man im Screenshot (siehe oben und nochmal angehängt)

CID bzw. cid steht für Content-ID, also das mail-interne Gegenstück zu einer URL.

Bei eingebetteten Bildern wird aus <img src="../_data/blablabla.jpg" ... ein Link auf das mitgesendete Bild <img src="cid:xyz.jpg" ..., wobei dazu ein Mailabschnitt mit xyz.jpg (enthält die Bilddaten in base64-Codierung) benannt sein muss. Das kann auch der originale Name sein.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

Mittels Kontrollausgabe (und Speicherung im Error-Log) habe ich nun festgestellt, dass die Variable Bilder ein leerer String mit der Länge 0 ist, also vermutlich irgendwo mittels $bilder = ''; oder initVar($bilder, ''); definiert wird.

Das gilt es jetzt zu suchen.

Prophylaktisch habe ich die ominöse Zeile 36 geändert zu

Code: Alles auswählen

if(is_array($bilder)) foreach ($bilder AS $bildid=>$bildstring)  {
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

Tja, manchmal ist es ja soooo einfach:

In der originalen img_add.inc.php lauten die Zeilen 32 bis 35

Code: Alles auswählen

if (!defined('CPO')) exit;
// set_magic_quotes_runtime(0); FIX_ME if necessary

// Bilder anfügen
auf Deinem Server lauten diese

Code: Alles auswählen

if (!defined('CPO')) exit;
// set_magic_quotes_runtime(0); FIX_ME if necessary
initVar ($bilder, '');
// Bilder anfügen
Nun erstaunt es nicht mehr, dass $bilder ein leerer String statt ein Array ist.

Wie kommt das da hin?

Vermutung: Du hast keine Bilder in den Artikelinhalten gehabt, aber dennoch eingestellt, dass Bilder eingebettet werden sollen und somit eine "undefined" Meldung erhalten.
Durch die zugefügte Zeile entfällt zwar die Meldung, es wird aber ein Fehler erzeugt, weil eben ein Array erwartet wird.

Fazit: Die nicht originale Zeile initVar ($bilder, ''); verursacht den Fehler.

Mögliche Lösungen:
- "Bilder einbetten" nur aktivieren, wenn es Bilder im Artikeltext des Newsletters gibt.
- die Zeile ändern zu initVar ($bilder, array());
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 846
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von hscha »

Da hab ich mir mit der initVar-Zeile selbst ein Bein gestellt! Außerdem war mir nicht klar, dass die Bilder in meinem Newsletter über das Stylesheet vom Server geladen und nicht eingebettet werden.
Ich werde die Einstellungen des Modules umgehend ändern und die Codezeile korrigieren. 1000 Dank, Markus!
Schöne Ostern wünscht dir Horst
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

Es geht ja beim Einbetten darum, dass dies ein Anwender/Redakteur selbst nicht kann, also werden die von ihm erstellten Inhalte danach durchsucht und eine entsprechende Einbettung vorgenommen.

Als Webmaster und Administrator, der ja das CSS bearbeiten kann, kann man ja einfach die Bilder ins CSS einbetten, wie ich es bei der "Word-Bremse" mache:

Code: Alles auswählen

.beispiel {background: url("data:image/png;base64,iVBORw0KGgoAAA[...]AElFTkSuQmCC")}
(das haben sogar schon unfähige Redakteure unbewusst in einem Artikel geschafft, weil copy/paste ja so einfach erscheint...)
Das ist aber eher etwas für kleine Grafiken wie Bullets...

Oder Du setzt Deine Bilder wie vorgesehen in einen Artikel ein, bzw. mehrere. da jeder Newsletter ja aus einer Vielzahl von Artikeln bzw. Abschnitten zusammengesetzt werden kann.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
hscha
ConPresso-Experte
Beiträge: 846
Registriert: 22.02.2006 23:00
Wohnort: Berlin
Hat sich bedankt: 226 Mal
Danksagung erhalten: 33 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von hscha »

Das Problem war, dass eingebettete Bilder vom Mailprogramm (Apple) nicht an der richtigen Stelle, sondern unter der Mail gesammelt angezeigt wurden. Im Mailtext erschienen dann nur Bild-Platzhalter. Deshalb habe ich die CSS-Lösung gewählt, damit meine Newsletter nicht so stümperhaft aussehen.
Ich werde gleich nach Ostern einen neuen Anlauf nehmen und erneut damit experimentieren...
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7547
Registriert: 01.01.1970 02:00
Hat sich bedankt: 118 Mal
Danksagung erhalten: 943 Mal

Re: PHP-Warning beim Versenden von Newsletter

Beitrag von MarkusR »

Ok, lange Geschichte...

1. ) Apple Mail ignoriert Attachments mit der passenden CID, wenn diese nicht explizit als "inline" definiert sind, was anderen Clients egal ist -> daher habe ich es bei Dir jetzt mit $phpmailer->addEmbeddedImage versucht

2.) Leider hat das aber nicht funktioniert und die Bilder wurden nicht als "inline" definiert

3.) das lag daran, dass diese nicht als interne Bilder erkannt wurden und somit $phpmailer->addEmbeddedImage gar nicht zum Einsatz kam

4.) das wiederum lag daran, dass zur Erkennung eine in den Newsletter-Einstellungen bei "Newsletter Zeitplan" eingetragene URL benutzt wird. Diese stand noch auf https://gesangskreis-wichern-radeland.de/cms/, durch die Anpassung der .htaccess muss diese nun aber https://www.gesangskreis-wichern-radeland.de/cms/ lauten.
Ja, ich weiß, das war für Dich nicht abzusehen, aber um PHPmailer nutzbar zu machen, habe ich auf diesen Wert zurückgegriffen, da er sonst nirgends verfügbar war...

Für das Einbetten externer Bilder habe ich nun einen Download als temporäre Datei vorgesehen.
Bei Dir habe ich nun erst mal wieder das Einbetten deaktiviert.

Komplex wird es zusätzlich, da Du ja nicht Bilder verwendest, die von ConPresso verwaltet werden, sondern welche, die außerhalb des ConPresso-Root (/cms) gespeichert sind (/bilder) und somit die automatische Erkennung extrem erschwert oder unmöglich wird. Nach ersten Tests scheint das aber wider Erwarten zu funktionieren, weil diese mit der URL https://www.gesangskreis-wichern-radeland.de/bilder als EXTERNE Bilder gewertet werden (müssen), Dein Server also bei sich selbst anruft und die Bilder übers Internet anfordert, statt sie von der eigenen Festplatte zu lesen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle