Hallo
Im Error-Log findet sich nichts.
Die angemailten Email-Adressen sind erreichbar (sowohl die Strato-gehosteten als auch externe).
Am Code wurde nichts geändert, auch nicht die PHP-Version (8.2), und Strato hat keinerlei Änderungen vorgenommen. Die Seite läuft bis auf die Nichtausführung von mail() unauffällig.
Der mail-Befehl wird mit Rückgabewert true abgesetzt, aber keine email versendet.
Um Klarheit zu schaffen: die Funktion mail
versendet keine E-Mails. Sie übergibt eine E-Mail an einen Mail Transfer Agent (MTA) und der versendet die E-Mail. Wenn mail
also den Rückgabewert true
liefert, heißt das nur, dass sie eine E-Mail beim zuständigen Programm abgeliefert hat. Über den Versand der E-Mail an sich sagt das nichts aus.
Strato sagt: nicht unser Problem.
Das sagt der Support (von wem auch immer) erst einmal immer, auch bei nicht offensichtlichen eigenen Fehlern. Das heißt nicht, dass nicht doch eine auf den ersten Blick unauffällige Änderung erfolgt sein kann, die quasi hintenrum das Problem verursacht.
Folgendes rudimentäre Skript
<?php
echo mail ("error@meinserver.de", "Betreff", "Inhalt");
?>
Auf der Manual-Seite von mail
heißt es in einer Anmerkung (Note) im Abschnitt additional_headers …
When sending mail, the mail must contain a From
header. This can be set with the additional_headers
parameter, or a default can be set in php.ini.
… 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?
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 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 mail
Richtung MTA auf dem lokalen System erfolgt, das im Falle von Unixoiden mit \n
funktioniert.
Die MTAs bauen die Header selbst von \n
auf \r\n
um. Wenn mail
die Header schon mit \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.
Soweit ich das verstanden habe, ist das Problem aber umgehbar, indem die zusätzlichen Header als Array an mail
übergeben werden (ab PHP 7.2, also kein Problem für dich).
Tschö, Auge
--
„Habe ich mir das nur eingebildet, oder kann der kleine Hund wirklich sprechen?“ fragte Schnapper.
„Er behauptet, nicht dazu imstande zu sein“ erwiderte Victor.
Schnapper zögerte (…) „Nun …“ sagte er schließlich, „ich schätze, er muss es am besten wissen.“
Terry Prattchett, Voll im Bilde