Tach!
Solltet Ihr jedoch zu dem Schluss kommen, dass es unrettbar "bad,bad,bad" ist, stellt es kein Problem dar, die Publikation zu löschen, um Mißbrauch oder gar Schäden nicht zu fördern.
Also, ich bin nicht dieser Meinung. Man kann alles so umschreiben, dass es den Umständen nach sicher wird. Es sieht jetzt auch nicht grundsätzlich so aus, als ob es weniger Aufwand wäre, es neu zu schreiben, als die Fehler zu beseitigen. Der wichtigste Punkt ist die kontextgerechte Behandlung der Werte. Man muss sich dann auch keine Gedanken machen, was woher kommt, denn sobald man irgendwas in den Zielkontext so einfügt, dass es als Daten interpretiert wird, hat man keine Injection-Lücke mehr.
Allgemeine Hinweise zur Verbesserung:
Es ist nicht sinnvoll, Werte aus $_SERVER (oder $_GET oder $_POST) 1:1 in andere Variablen umzukopieren. Man gewinnt dadurch nur wenig (kleiner Komfort beim Einfügen in ""-Strings), hat aber eine Indirektion drin und eine Variable mehr zu pflegen. Wenn man den Wert anschließend nur ein einziges Mal braucht, hat man sogar effektiv mehr Code geschrieben, als wenn man den $_SERVER['irgendwas'] direkt am Ziel notiert hätte.
Statt vieler Zeilen mit $mail_text .=
kann man die Heredoc- oder die Nowdoc-Syntax verwenden (siehe Handbuch zu Strings). Man kann dabei auch Variablen (sowie komplexe Array-Zugriffe) einbauen, allerdings keine Rückgabewerte von Funktionsaufrufen. Diese braucht man aber, wenn man htmlspecialchars() oder eine andere Maskierfunktion für den Ziel-Kontext verwenden muss.
dedlfix.