Avatar

Avatare funktionieren nicht (General)

by Auge ⌂, Sunday, February 18, 2024, 22:44 (68 days ago) @ Regi

Hallo,

hmm, ich habe an einem Live-Beispiel verglichen, was unsere Software produziert und was laut der GMX-Fehlerbeschreibung deren Erwartungen entspricht.

Das ist, wie der FROM-Header laut der GMX-Fehlerbeschreibung aussehen soll …


From: "Sender name" <sender@example.com>

… und das ist, was unser Skript als FROM-Header erstellt.


From: Sender name <sender@example.com>

Der einzige Unterschied ist, dass der Name des Absenders von unserem Skript nicht in Anführungszeichen gesetzt wird. Sollte das wirklich so einfach sein?

Diesen Unterschied gibt es im Übrigen sowohl bei unseren selbstgebauten Headern, die wir an die PHP-Funktion mail übergeben, als auch, so hat ein Test in einer Entwicklungsinstallation ergeben, beim Versand von E-Mails über die Mailer-Klasse PHPMailer, die alternativ für den Versand direkt über einen SMTP-Server benutzt werden kann. Die Schreibweise ohne Anführungszeichen kenne ich auch aus hunderten anderer E-Mails, die über andere Programme als MLF versendet wurden, ohne, dass das je zu Problemen geführt hat.

Aaaaber nach einer längeren Recherche, die Mailer-Klasse PHPMailer betreffend, habe ich eine andere Vermutung. Im Github-Repo von PHPMailer gibt es einen Bug-Report vom 01.02.2024 zum Thema des nichtfunktionierenden E-Mail-Versands mit der Klasse, wenn als Methode die PHP-Funktion mail unter Linux mit einer PHP-Version 8.x benutzt wird. Der Fehler tritt unter PHP-Versionen bis 7.4 nicht auf und auch nicht, wenn im PHPMailer eine andere Versandmethode als mail ausgewählt wurde.

Ab der PHP-Version 8.0 werden Zeilenumbrüche zwischen den Headern einer E-Mail, dem Standard entsprechend, rigoros als \r\n gesetzt. Damit wiederum kommen einige Mail-Transfer-Agents (MTA), wie sendmail, nicht zurecht, die zwischen den Headern den unixoinden Zeilenumbruch \n sehen wollen, weil sie unter einem solchen OS laufen und die Zeilenumbrüche, wenn sie die E-Mail übernommen haben, selbst umbauen. Bekommen sie fälschlicherweise den Windows-Zeilenumbruch \r\n, setzen sie selbst noch einmal ein \r davor (weil sie ja nur \n erwarten), was in einem defekten Umbruch \r\r\n resultiert. Damit sind die E-Mail-Header kaputt.

Siehe dazu auch diesen Benutzerkommentar in der PHP-Doku-Seite zu mail und die Disḱussion in einer Bug-Meldung im PHP-Repo selbst. Der Fix, ein neuer Schlüssel zum umschalten der Zeilenumbrüche zwischen \r\n und \n in der php.ini, ist allerdings nur in neueren PHP-Versionen der Zweige 8.2 und neuer zu haben. Und man muss ihn auch setzen können, was in vielen Fällen nicht gegeben ist.

Rückblick Anfang:

Mit genau diesem Problem haben wir uns schon vor 14 Jahren rumgeschlagen. Die betreffende Diskussion ist leider nicht mehr öffentlich verfügbar. Gesagt sein aber, dass wir diverse Konstellationen mit verschiedenen Zeilenunbruchzeichen, verschiedenen MTAs und verschiedenen oft genutzten E-Mail-Anbietern durchtesten mussten, bis wir einen stabilen Versand hinbekamen. Damals war uns auch die Ursache nicht klar, wir haben nur per try'n'error mit den Auswirkungen gekämpft.

Rückblick Ende.

Lange Rede kurzer Sinn, um auszuschließen, dass das die Ursache deines Problems ist, bitte ich dich, den E-Mail-Versand zumindest testweise über den PHPMailer laufen zu lassen. Ändere dazu im Verzeichnis config die nötigen Werte in der Datei php_mailer.php. Normalerweise müssen nur die Angaben zu Host (SMTP-Server) sowie Username und Password angepasst werden. Dort musst du die selben Werte für den SMTP-Versand eintragen, wie in deinem lokalen E-Mail-Programm (zum Beispiel Thunderbird, Outlook), so du eines benutzt. Wenn nicht, findest du die Angaben in der Hilfe bei deinem Hoster (GMX?). Der Fehler mit dem Zeilenumbruch tritt nämlich nur beim E-Mail-Versand über die PHP-Funktion mail im Zusammenhang mit einem MTA auf, nicht jedoch beim Versand direkt über SMTP.

[edit]: Wenn du die Datei php_mailer.php nach dem einpflegen der Änderungen wieder hochgeladen hast, musst du nur noch in die erweiterten Einstellungen des Forums gehen, dort für den Schlüssel php_mailer den Wert von 0 auf 1 setzen und unterhalb der Einstellungstabelle die Änderungen speichern.

Wenn es das nicht ist, müssen wir weitersuchen.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!


Complete thread:

 RSS Feed of thread