Wie schicke ich Kontaktformulare als email?


24.04.2020, 16:09

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();
}
Woher ich das weiß:Studium / Ausbildung – Fachinformatiker für Systemintegration / Freelance als AWE
wk744 
Fragesteller
 24.04.2020, 16:40

Soll ich dann in der html datei einfach die php datei verlinken oder muss ich noch etwas beachten?

0
flumex  24.04.2020, 16:42
@wk744

In deinem Form-Tag muss folgenes rein:

<form action="<die php datei>.php" method="post">
1
wk744 
Fragesteller
 24.04.2020, 18:16
@flumex

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>
0
regex9  25.04.2020, 14:39
@wk744

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).

0