dedlfix: Formmailerskript funktioniert nicht :(

Beitrag lesen

Hi!

ich versuche nun schon seit ca. 2 Stunden das Formmailerskript zum Laufen zu bekommen.

Wie lange du daran schon arbeitest ist nicht weiter relevant. Wichtiger ist, was du alles bereits probiert hast und nicht zum Erfolg führte. Ansonsten zählen wir das nämlich alles nochmal und unnötigerweise auf.

Das Script kommt von dieser Seite und sollte eigentlich funktionieren: http://webkompetenz.wikidot.com/html-handbuch:einfacher-formmailer-php

Das Script hat einige Fehler, wenigstens keine sicherheitsrelevanten.

Doch es zeigt mir nur immer die Fehlerseite an :(

Die Fehlerseite wird unter einer Bedingung angezeigt: Der Mailversand war nicht erfolgreich. Um Fehler beim Versand zu finden, ist es sinnvoll, den Fehlerunterdrückungsoperator @ vor dem Aufruf von mail() zu entfernen und das Anzeigen von Fehlermeldungen generell zuzulassen. Ob der Mailversand prinzipiell funktionieren kann, kommt auf das System an, auf dem der Webserver läuft. Unter Windows wird dazu beispielsweise ein Mailserver benötigt, der zumindest in der php.ini konfiguriert sein muss. Unter Linux wird (ein) sendmail(-Ersatz) verwendet, der üblicherweise mit dem System installiert wird und aus PHP-Sicht sofort funktionieren sollte.

Zur Ursachenforschung wäre also erst einmal das @ zu entfernen und das Wissen notwendig, welches Betriebssystem vorliegt. Wenn keine Meldung angezeigt wird, wären die Werte von display_errors und error_reporting in einer phpinfo()-Ausgabe zu prüfen und gegebenenfalls zu ändern.

Es folgen Anmerkungen zu den Fehlern im Script.

// Wenn Daten mit method="post" versendet wurden:
if(isset($_POST)) {

Das ist der erste Fehler. $_POST ist immer vorhanden, auch wenn das Script per GET aufgerufen wurde. Bei einem POST ist es jedoch üblicherweise nicht leer, denn man möchte ja ein paar Daten verarbeiten. if (!empty($_POST))

// ======= Korrekturen vor dem Mailversand
// Wenn PHP "Magic Quotes" vor Apostrophzeichen einfügt:
if(get_magic_quotes_gpc()) {
     // eventuell eingefügte Backslashes entfernen
     $mailtext = stripslashes($strMailtext);

Die Magic Quotes können prinzipiell alle Eingabefelder treffen, nicht nur den Mailtext. In der E-Mail-Adresse eher selten, aber Namen und Betreffs können welche enthalten. Zudem ist die Variable $strMailtext überhaupt nicht verwendet worden, was im Falle von eingeschalteten Magic Quotes dazu führt, dass eine neue Variable $mailtext mit einem Leerstring hinzugefügt wird. Ja, hinzugefügt, denn der eigentliche Mailtext ist in der Variable $mailText (mit einem großen T). Außerdem gäbe es eine Notice-Meldung, wenn das error_reporting auf E_ALL stände. Diese Stelle zeigt, dass der Autor die eingebauten Funktionalitäten nicht alle überprüft hat.

if($mailSent == TRUE) {

Ist es wahr, dass $mailSent wahr ist? Beim Auswerten von Ausdrücken in einem boolschen Kontext kann man ein "== true" getrost weglassen.

// ======= Ende

exit();

?>
</body>
</html>

Und warum soll das HTML-Dokument nicht ordentlich geschlossen werden? Mit der PHP-Kompetenz sieht es bei "Herrn Webkompetenz" nicht besonders gut aus.

Lo!