PHP Kontakt Formular mit UTF-8 als Email verschicken (jQuery powered)


Hier geht es jetzt darum ein Formular per PHP als Email zu verschicken. Da sich im Web der UTF-8 Zeichensatz immer mehr als Standard durchsetzt, kommt es beim Benutzen der PHP mail() Funktion zu einigen unschönen Ausgabeproblemen der Umlaute und Sonderzeichen.  Im Internet stößt man auf die abenteuerlichsten Lösungen, die auch alle ihre Berechtigung haben. Die hier gezeigte Lösung soll zu einem schnellen Ergebnis führen und dabei auch für den weniger PHP begabten Nutzer nachvollziehbar sein. Also kurz ein Formular erstellt.

HTML Code


<form id="form" action="form2email.php" method="post">
<label for="name">Name</label>
<input id="name" name="name" size="25" type="text" />
<label for="email">Email</label>
<input id="email" name="email" size="25" type="text" />
<label for="betreff">Betreff</label>
<input id="betreff" name="betreff" size="25" type="text" />
<label for="nachricht">Nachricht</label>
<textarea id="nachricht" cols="50" rows="6" name="nachricht"></textarea>
<input id="submit" name="submit" type="submit" value="Formular senden" />
</form>

PHP Code

// Ausführen wenn Formular gesendet
if (isset($_POST["submit"]))
{

// Sammeln der Formulardaten
$an = "meine@email.de";
$name = $_POST['name'];
$email = $_POST['email'];
$betreff = $_POST['betreff'];
$nachricht = $_POST['nachricht'];

// Mailheader UTF-8 fähig machen
$mail_header = 'From:' . $email . "n";
$mail_header .= 'Content-type: text/plain; charset=UTF-8' . "rn";

// Nachrichtenlayout erstellen
$message = "
Name: 		$namen
Email: 		$emailn
Nachricht: 	$nachrichtn
";

// Verschicken der Mail
mail($an, $betreff, $message, $mail_header );
};

Hinweis

Der gezeigte Code löst das Umlautproblem durch Erweiterung des Mailheaders, mehr nicht. Ein schickes Webformular sollte natürlich mehr bieten. Als erstes gehört eine Validierung der Eingaben in das Formular. Dazu gibt es schicke auf jQuery basierende Javascript Lösungen. Hier ein Fundstück mit jQuery Formular-Validierungs-Plugins. Um sich vor Spammern zu schützen sollte man auch noch ein Captcha nutzen. Mein Favorit ist eindeutig das jQuery – s3Captcha.

Im Demo könnt ihr das Kontaktformular als Komplettpaket sehen, sprich mit Validierung und Captcha. Das Download Paket enthält neben der oben im Code gezeigten Variante auch dieses “ready to use” Komplettpaket. Wie immer gilt…bei Fragen fragen!

Demo

Download

Hinweis in eigener Sache!
Das Script ist meine persönliche Lösung, ich erhebe keinen Anspruch darauf, dass diese auch die Beste ist. Änderungen, Verbesserungen und Optimierungen am Script sind ausdrücklich erlaubt. Die Benutzung des Scriptes erfolgt auf eigene Gefahr. Für eventuelle Schäden, die durch den Einsatz bzw. die Nutzung des Scriptes entstehen, übernehme ich keine Haftung.
19. Oktober 2012 Kategorie: Demos & Tutorials 0



15 Kommentare zu “PHP Kontakt Formular mit UTF-8 als Email verschicken (jQuery powered)”

  1. Stany sagt:

    Ein echt gutes Kontakt Formular, sehr einfach zu bedienen und nur zu empfehlen. Vielen Dank an Rico

  2. toxi sagt:

    oha danke funktioniert auch super :)

  3. Ben sagt:

    Echt genial – das is schon ne ideal Lösung von einem Kontaktformular!
    Vielen Dank.

  4. basteln sagt:

    hallo, kann mir einer sagen, was ich falsch mache?
    http://s7.directupload.net/images/110404/zckdg3um.jpg

    danke =)

  5. basteln sagt:

    habs hinbekommen =) danke für das script!

  6. Knut sagt:

    Ein Problem mit grafischen Captchas ist leider, dass die Seite dadurch nicht mehr barrierefrei ist. Hier sind Captchas besser, die Aufgaben wie “3+5=?” stellen. Außerdem lassen sich textbasierte Captchas auch leichter lokalisieren (l12n).

  7. Jakob sagt:

    Hey,

    ich bin gerade am rumprobieren mit deinem wunderbaren Skript, und habe zwei Fragen dazu:

    1. Ist es möglich, eine zweite eMail (an den Verfasser der Nachricht) mit einer Eingangsbestätigung zu schicken und wenn ja, ist das sehr kompliziert?

    2. Ich habe mir gerade um 13:01 selber eine eMail geschickt und im Zeitstempel steht leider 13:1 Uhr statt 13:01 Uhr. Wo liegt da der Fehler?
    Ich würde auch $date = date(“d.m.Y – H:i”); nutzen, da schreibt er 13:01, dafür fehlt das um, stattdessen steht dann “am 25.05.2012 – 13:01 Uhr” in der Mail, um wäre schöner.

    Danke!

  8. Angela sagt:

    Hab ein bisschen gesucht, bis ich auf dieses schicke Kontaktformular gestoßen bin. Danke dafür! Leider funktioniert die Umsetzung der Umlaute nur im Text der Nachricht und nicht im Betreff. Lässt sich da nochwas nachbessern //ganzliebfrag//?

  9. Ricco sagt:

    Der Download funktioniert leider nicht mehr :/

  10. Niels sagt:

    Ein sehr schönes Kontaktformular. Ich habe nur leider das gleiche Problem wie “basteln”. Woran kann das liegen?

    Danke!

  11. Dominik sagt:

    Ich würde dringend dazu raten, neben der jQuery-Validierung für den User auch eine Validierung der eingetragenen Daten via PHP empfehlen, um sich vor Hacker-Angriffen zu schützen.

    Ansonsten gutes Tutorial.

    • sevenx sagt:

      Gebe ich dir absolut recht, serverseitige Verarbeitung von Formularen ist immer zu empfehlen, ich werde das bei Gelegenheit noch nachreichen.

  12. knowhow sagt:

    Hallo,
    irgendwie hat das Skript bei mir nicht funktioniert.
    In der Datei “simple_form2email.php” steht “action = form2email.php” !
    soll das nicht “action=simple_form2email.php” sein?
    Ist das ein Fehler oder steckt was dahinter, was ich leider nicht darauf kommen kann ?
    Bei der Datei “full_form2email.php” kriegen ich viele Fehler, z.B. Undefined index: name, email, Betreff, nachricht …

    • sevenx sagt:

      Im simple Beispiel muss natürlich der eigenen Dateiname, also simple_form2email.php im Actionfeld des Formulars stehen. Das war mein Fehler, ist in der Download Datei geändert. Vielen Dank für den Hinweis.

Hinterlasse eine Antwort