… in deinem Beispielcode gibt es aber keinen Parameter für zusätzliche Header, also auch keine Angabe für
From
. Gibt es im nicht rudimentisierten Skript zusätzliche Header mit einer Angabe einer Absendeadresse (From
)? Wenn ja, sind es mehrere und wie sind die einzelnen Header voneinander getrennt (\n
oder\r\n
), falls sie als String und nicht als Array angegeben sind?
mail()
befindet sich in verschieden stark ausgebauten Varianten in meinen Skripten. Meist sieht es so aus:
mail(
'mail@meinserver.de',
$betreff,
$content,
'MIME-Version: 1.0'."\r\n" .
'Content-Type: text/plain; charset=UTF-8'."\r\n" .
'From: Error-Messenger <error@meinserver.de>'."\r\n"
);
$betreff und $content sind unproblematisch (Länge und Zeilenumbrüche, Sonderzeichen im Betreff), bei nicht an mich gesendete Mails kommen noch Reply-To und Cc/Bcc hinzu, sowie manchmal auch mehrere Adressen im Empfänger. Als Array übergebe ich die Daten nicht.
Wie gesagt, es hat bisher funktioniert - die letzte Code-Generalüberholung fand Anfang des Jahres statt, als ich auf PHP 8.x gewechselt bin. Seither sind Hunderte Emails erfolgreich (und schnell) zugestellt worden oder "ordentlich" gebounct. Bis letzte Woche.
edit: Manche Hoster wollen auch einen zusätzlichen Parameter (nicht Header) sehen, der im fünften Parameter der Funktion hinterlegt wird. Das ist dann gerne mal sowas wie
-f gueltige-absendeadresse@example.com
. Falls das so ist, solltest du die nötigen Infos in den FAQ von Strato finden. edit ende
Ich hatte beim Support nachgefragt, aber da war keine Änderung bekannt. In den FAQ findet sich nichts derartiges. Auch wenn solche Aussagen mit Vorsicht zu genießen sind, würde ich annehmen, dass sich eine Änderung im Support-Aufkommen relativ schnell bemerkbar macht.
Ich frage so explizit nach dem Aufbau von, weil mit PHP 8 die Trennung der zusätzlichen Header mit
\r\n
erzwungen wurde (entspricht RFC2822 für E-Mails). Damit ist der E-Mail-Versand in den Skripten diverser Programme abgestorben, weil sich die Programmierer dieser Skripte aufgrund eigener und/oder erlesener Erfahrungen und Tests darauf verlassen haben, dass speziell unter Unix/Linux, die MTAs üblicherweise mit\n
getrennte Header erwartet haben. Das haben sie, weil die Übergabe von\n
funktioniert.
Die MTAs bauen die Header selbst von
\n
auf\r\n
um. Wenn\r\n
angeliefert hat, baut sie der MTA zu\r\r\n
um und damit scheitert der Versand der E-Mails in aller Stille ohne Fehlermeldung. Nach Diskussionen wurde das Erzwingen von\r\n
zum trennen von Headern mit PHP 8.1 über einen Schalter in der php.ini optional gemacht. Nicht, dass Strato da irgendetwas umkonfiguriert hat.
mail
ohne Header funktioniert aber auch nicht (vorausgesetzt, der Header ist bei Strato optional), und mit fehlenden \r bessert sich die Lage leider nicht (gerade versucht).
Lässt sich der Schalter über phpinfo() auslesen? Ich habe da nichts gefunden. Und eine eigene php.ini habe ich nicht.
Soweit ich das verstanden habe, ist das Problem aber umgehbar, indem die zusätzlichen Header als Array an
Ja, nur leider tuts das hier auch nicht:
$headers = [
'MIME-Version' => '1.0',
'Content-Type' => 'text/plain; charset=UTF-8',
'From' => 'Error-Messenger <error@meinserver.de>'
];
mail(
'mail@meinserver.de',
'Betreff',
'Inhalt',
$headers
);
weitere Ideen?