Hello,
oh jeh!
Das ist eine wunderbare Spamschleuder und sogar ganz bequem per Get-Request zu bedienen!
Du solltest Dur als erstes ma alle Artikel hier im Forums-Archiv ziehen, die sich mit den Themen "MIME Mail" und "Mail Server Injection" oder so ähnlich formuliert beschäftigen.
Und warum lässt Du eine Multipart-MIME-Meil erzeugen, auch wenn gar kein Anlass dazu besteht?
Hier wäre ein IF() mehr doch wirklich nicht zuviel verlangt.
Außerdem sollte der Upload einer Datei im Formular abgekoppelt werden von der Überprüfung der übrigen Daten. Dazu wirst Du dann aber eine Session oder zumindest eine Formular-ID benötigen. Warum soll das File jedes Mal neu übertragen werden müssen, nur weil ein gefordertes Datenfeld nicht ausgefüllt wurde?
Der unbedingte Zugriff
$Dateiinhalt = fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
unter Benutztung der Daten vom Client (['size']) ist auch nicht ok. Das ist vermutlich Deine gesuchte Fehlerquelle. Ich mag das aber gar nicht genauer erklären, bevor Du das Scriot nicht besser strukturiert hast und die Möglichkeit zur Mail-Server-Injection beseitigt hast.
Diese ist immer dann vorhanden, wenn man gestattet, dass aus dem Request ungefiltert Daten in die Header der Mail gelangen können. Dis geht auch über die Funktionsargumente $to und $subject der mail()-Funktion.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg