Wie schicke ich Kontaktformulare als email?
hallo, ich habe ein fertiges kontaktformular und wollte fragen, was ich machen muss, damit nachdem man den submit button gedrückt hat, das ausgefülte als email an mich gesendet wird.
Vielen Dank im voraus!
1 Antwort
Das machst du mit der mail Funktion. Hier ein kleines Beispielskript
<?php
//send_email.php
$email_from = "absender@domain.de"; //Absender falls keiner angegeben wurde
$sendermail_antwort = true; //E-Mail Adresse des Besuchers als Absender. false= Nein ; true = Ja
$name_von_emailfeld = "Email"; //Feld in der die Absenderadresse steht
$empfaenger = "deine-email@email.com"; //Empfänger-Adresse
$mail_cc = ""; //CC-Adresse, diese E-Mail-Adresse bekommt einer weitere Kopie
$betreff = "Neue Kontaktanfrage"; //Betreff der Email
$url_ok = "http://www.domain.de/ok.php"; //Zielseite, wenn E-Mail erfolgreich versendet wurde
$url_fehler = "http://www.domain.de/fehler.php"; //Zielseite, wenn E-Mail nicht gesendet werden konnte
//Diese Felder werden nicht in der Mail stehen
$ignore_fields = array('submit');
//Datum, wann die Mail erstellt wurde
$name_tag = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
$num_tag = date("w");
$tag = $name_tag[$num_tag];
$jahr = date("Y");
$n = date("d");
$monat = date("m");
$time = date("H:i");
//Erste Zeile unserer Email
$msg = ":: Gesendet am $tag, den $n.$monat.$jahr - $time Uhr ::\n\n";
//Hier werden alle Eingabefelder abgefragt
foreach($_POST as $name => $value) {
if (in_array($name, $ignore_fields)) {
continue; //Ignore Felder wird nicht in die Mail eingefügt
}
$msg .= "::: $name :::\n$value\n\n";
}
//E-Mail Adresse des Besuchers als Absender
if ($sendermail_antwort and isset($_POST[$name_von_emailfeld]) and filter_var($_POST[$name_von_emailfeld], FILTER_VALIDATE_EMAIL)) {
$email_from = $_POST[$name_von_emailfeld];
}
$header="From: $email_from";
if (!empty($mail_cc)) {
$header .= "\n";
$header .= "Cc: $mail_cc";
}
//Email als UTF-8 senden
$header .= "\nContent-type: text/plain; charset=utf-8";
$mail_senden = mail($empfaenger,$betreff,$msg,$header);
//Weiterleitung, hier konnte jetzt per echo auch Ausgaben stehen
if($mail_senden){
header("Location: ".$url_ok); //Mail wurde gesendet
exit();
} else{
header("Location: ".$url_fehler); //Fehler beim Senden
exit();
}
Hallo,
ich habe alles gemacht, allerdings reagiert mein submit button nicht. Ich weiß nicht, wo der fehler ist. Kann jemand bitte helfen.
<section id="appointment" data-stellar-background-ratio="3">
<div class="container">
<div class="row">
<div class="col-md-6 col-sm-6">
<img src="images/appointment-image.jpg" class="img-responsive" alt="">
</div>
<div class="col-md-6 col-sm-6">
<!-- CONTACT FORM HERE -->
<form id="appointment-form" role="form" action="email.php" method="post">
<!-- SECTION TITLE -->
<div class="section-title wow fadeInUp" data-wow-delay="0.4s">
<h2>Make an appointment</h2>
</div>
<div class="wow fadeInUp" data-wow-delay="0.8s">
<div class="col-md-6 col-sm-6">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Full Name">
</div>
<div class="col-md-6 col-sm-6">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Your Email">
</div>
<div class="col-md-6 col-sm-6">
<label for="date">Select Date</label>
<input type="date" name="date" value="" class="form-control">
</div>
<div class="col-md-6 col-sm-6">
<label for="select">Select Department</label>
<select class="form-control">
<option>General Health</option>
<option>Cardiology</option>
<option>Dental</option>
<option>Medical Research</option>
</select>
</div>
<div class="col-md-12 col-sm-12">
<label for="telephone">Phone Number</label>
<input type="tel" class="form-control" id="phone" name="phone" placeholder="Phone">
<label for="Message">Additional Message</label>
<textarea class="form-control" rows="5" id="message" name="message" placeholder="Message"></textarea>
<button type="submit" class="form-control" id="cf-submit" name="submit">Submit Button</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
Es gibt da ein paar Punkte, die du ändern solltest.
- Entferne das role-Attribut vom form-Element. Es ist bereits ein Formular. Es doppelt als solches zu kennzeichnen, hat keinen Sinn.
- Das for-Attribut deiner Labels muss auf id-Attribute deiner input-Felder zeigen. Also ergänze noch die IDs und achte in jedem Fall darauf, dass beide Werte identisch sind (message - Message sind es bspw. nicht).
Bezüglich der Disfunktionalität: Lasse dir doch einmal mit Testausgaben anzeigen, welche Daten im PHP-Skript ankommen und wie weit das Skript überhaupt kommt. Füge diese drei Zeilen am Anfang des Skripts ein:
ini_set("display_errors", 1);
ini_set("display_startup_errors", 1);
error_reporting(E_ALL);
und schaue dann, ob dir Warnungen/Fehler ausgegeben werden.
Noch etwas zu dem obigen PHP-Skript:
1) Ich sehe keinen praxisbezogenen Sinn in $sendermail_antwort. Auf die versendete Nachricht möchte der Empfänger doch in der Regel auch die Möglichkeit haben, zu antworten. Daher würde ich die Absendeadresse als Pflichtangabe betrachten. Wenn diese nicht gegeben ist, wird die E-Mail eben nicht gesendet.
2) Ich würde zu Beginn erst prüfen, ob Formulardaten überhaupt empfangen wurden. Andernfalls kann jemand die URL auch so einfach mehrmals aufrufen und dich leicht vollspammen.
<?php
if (!isset($_POST["submit"])) {
header("Location: yourFormPage.php");
exit;
}
// ...
Genauso könntest du weitere Daten deines Formulars validieren. Gerade die, die du als erforderlich betrachten würdest, sollten ja nicht leer sein (Bsp.: Das Message-Feld).
Soll ich dann in der html datei einfach die php datei verlinken oder muss ich noch etwas beachten?