Antworten auf deine Fragen:
Neues Thema erstellen

Kontaktformular mit PHP kleine Probleme

Hallo Leute,

ich versuche gerade mit der mail methode von PHP eine Kontaktformular zu erstellen.
Die Emails werden zwar versendet aber nicht so wie ich es mir gewünscht habe.

Beim Absender wird world4you angezeigt statt der Email Adresse des Absenders ..
Und statt dem Namen des Absenders steht "Unbekannter Absender"...

Kann mir jemand bitte sagen wo mein Fehler ist:


Das ist mein form Tag
HTML:
        <div class="box_contact">
          <form class="" action="senden.php" method="post">
            <div class="">
              <label>Name</label>
              <input type="text" name="von" placeholder="Bitte geben Sie Ihren Namen ein" value="">
              <label>E-Mail Adresse</label>
              <input type="text" name="email" placeholder="Bitte geben Sie Ihre Email-Adresse ein" value="">
              <label>Telefonnummer</label>
              <input type="tel" name="tel" placeholder="Bitte geben Sie Ihre Telefonnummer ein" value="">
            </div>
            <div class="">
              <label>Nachricht</label>
              <textarea placeholder="Bitte geben Sie Ihre Nachricht ein" name="nachricht" rows="8" cols="40"></textarea>
              <button type="submit" name="submit" value="">Nachricht Abschicken</button>
            </div>



und das ist mein senden.php
PHP:
    <?php
        $empf = "elvan.dogan1905@gmail.com";
        $betreff = "Mail erhalten > von Renovierungs-Profi.at";
        $from = "From: ";
        $from .= $_POST['von'];
        $from .= " <";
        $from .= $_POST['mail'];
        $from .= ">\n";
        $from .= "Reply To: ";
        $from .= $_POST['mail'];
        $from .= "\n";
        $from .= "Content-Type: text/html\n";
        $text = $_POST['nachricht'];

        mail($empf, $betreff, $text, $from);

     ?>


Kann mir bitte wer helfen wie ich das Problem beseitigen kann ..

ich will das die Absender-Email Adresse angezeigt wird und der eingegebene Name statt "Unbekannter Absender"


Lg
 

Haui76

Nicht mehr ganz neu hier

Hab dein Form zwar noch nicht durchgetestet. Aber mir ist aufgefallen, dass du im HTML Teil die Mail-Variable "email" benannt hast und im PHP Teil heisst sie "mail".

Ist das so gewollt?
 

Dagobert68

Nicht mehr ganz neu hier

Moin BlackBoSs :)

wie Haui76 fiel mir die unterschiedliche Benennung der Variablen auch als erstes auf ohne getestet zu haben.

Wenn das dann soweit erst mal funktioniert, solltest du aber unbedingt noch bevor das Ding "live" geht, einiges an Überprüfungen hinzufügen (sofern du hier nicht nur eine verkürzte senden.php aufgeführt hast).

Oberstes Gebot: traue nie einer Benutzereingabe!
Alles, was im Formular vom Benutzer eingegeben werden kann, muss auch serverseitig überprüft werden, um sicher zu stellen, dass wirklich die erwarteten Daten übermittelt werden. Stichwort: Formularvalidierung / Validierung von Benutzereingaben. Dazu gibt es verschiedene Möglichkeiten, wie z.B. die Filter-Funktionen von PHP - siehe hier: http://www.php-kurs.com/daten-filtern.htm

Dann brauchst du auch unbedingt einen Schutz vor Mail-Header Injection - siehe hier:
http://www.php-kurs.com/e-mail-und-sicherheit.htm

Jetzt hier alles aufzuführen, würde sicher zu weit gehen. Daher noch ein weiterer Link zum Einlesen in das Thema:



Es ist etwas komplexer als du vielleicht erwartet hast, aber wenn du ein wenig Zeit dafür einplanst, wirst du am Ende ganz sicher ein funktionierendes UND sicheres Mail-Formular haben, das dich zudem auch nicht endlos mit Spam versorgt.

Hier auf psd-tutorials.de gibt's im Webbereich auch noch einiges an Hilfe dazu :)

Viel Erfolg und Grüßli,
Tina
 
Hallo, vielen Dank für die Tipps.
Bevor ich die Sicherheits und die Validierungen etc einbaue wollte ich mal sehen ob es überhaupt funktioniert.

Die unterschiedlichen Benennungen der Variablen hatte ich nicht bemerkt. ABER wenn ich die Variable $_POST['mail'] auf $_POST['email'] ändere bekomme ich keine Emails mehr. Und wenn ich es wieder auf die falsche Benennung also auf mail ändere bekomme ich wieder die Mails vom Server verschickt ohne das ich den Absendermail sehe.

Bin irgendwie verwirrt.
 

owieortho

Aktives Mitglied

Spurensuche: Kommentier doch mal die mail-Funktion aus und gebe anstelle die Variablen aus, insbesondere die $from. Ich habe das Gefühl, dass da etwas nicht so an die Funktion geliefert wird, wie die es erwartet.

O.
 

Haui76

Nicht mehr ganz neu hier

Dein $from wird ja zum Header der Email und der ist neben dem Empfänger das wichtigste für den Mailserver.
Betreff und Text sind da nebensächlich.
Gemäss deiner Vorstellung sollte dein Header am Ende so aussehen:
Code:
From:Max Muster <max.muster@example.com>
Reply to:max.muster@example.com
Content-Type: text/html
Da gibt es nun schon gleich mal ein paar Hürden.
  1. $_POST['mail'] ist leer. Was zufolge hat das dein Header so aussieht:
    Code:
    From:Max Muster <>
    Reply to:
    Content-Type: text/html

  2. Änderst du nun das Post auf "email" bekommt der Header zwar seinen Inhalt, scheitert aber am "Reply to". Da Fehlt leider der "-". Mit "Reply-To:" kommt die Nachricht weiter.

  3. Anregung: Füge bitte zu deinem $from folgendes hinzu:
    Code:
    $from .= "X-Mailer: PHP ". phpversion();
    Sonst landet dein Mail mit grosser Wahrscheinlichkeit im Spamfilter.

 

Haui76

Nicht mehr ganz neu hier

Warum kann ich dir so nicht sagen.
Eventuell hilft hier der fünfte Parameter von mail(). Der schreibt für das Mailsystem den Absender auf eine Bekannte Adresse um, ändert aber nicht die Mail.

mail($empf, $betreff, $text, $from, -finfo@example.com).​

Dazu muss ich aber auch sagen, dass ich den seit Ewigkeiten nicht mehr verwendet habe.
Besser ist du verwendest einen kompletten Header:
PHP:
 <?php
        $fromname .= $_POST['von'];
        $from .= $_POST['email'];
      
        $to = "elvan.dogan1905@gmail.com";
        $subject = "Mail erhalten > von xyz.com";
      
      
        $headers  = "From: " . $fromname . " <" . $from . ">\n";
        // set reply address
        $headers .= "Reply-To: ". $fromname . " <" . $from . ">\n";
        $headers .= "Return-Path: ". $fromname . " <" . $from . ">\n";
        // avoid spam-filters      
        $headers .= "Message-ID:<".$now." TheSystem@".$_SERVER['SERVER_NAME'].">"."\n";
        $headers .= "X-Mailer: PHP v".phpversion()."\n";          
      
        $message = $_POST['nachricht'];
        mail($to, $subject, $message, $headers);
     ?>

Das alles wird dir aber nicht weiterhelfen, wenn GMAIL der Sündenbock ist. Hast du schon einmal alle Felder im PHP Code fest vergeben und so eine Mail versendet?

Beispiel aus dem PHP Manual:
PHP:
<?php
$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\n" .
    'Reply-To: webmaster@example.com' . "\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>
 
N

nemaga

Guest

Kannst du probieren ob es so funktioniert => habe dein HTML Snippet angewendet (deswegen sieht es so aus :D )

Sag bescheid, wenn du es mal ausprobiert hast, dann nehme ich deine E-mail aus dem Script heraus.


P.S. hier noch die Script,


PHP:
<?php

if (count($_POST) > 0) {
    if (preg_match('/[\r\n]/', $_POST['von'])) {
        exit;
    }
    if (preg_match('/[\r\n]/', $_POST['email'])) {
        exit;
    }

    $absenderAdresse = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);

    $betreff = 'Mail erhalten ' . $_POST['von'] . ' (' . $absenderAdresse . ')';

    mail('elvan.dogan1905@gmail.com', $betreff, $_POST['nachricht']);

    header('Location: senden.php?ergebnis=erfolg');
    exit;
}

?>
<h1>Website bla bla...</h1>

<h2>Kontakt</h2>

<?php
if (isset($_GET['ergebnis']) && $_GET['ergebnis'] === 'erfolg') {
    echo '<p>Vielen Dank ...etc...</p>';
}
?>

<div class="box_contact">
         <form action="senden.php" method="post">
           <div class="">
             <label>Name</label>
             <input type="text" name="von" placeholder="Bitte geben Sie Ihren Namen ein" value="">
             <label>E-Mail Adresse</label>
             <input type="text" name="email" placeholder="Bitte geben Sie Ihre Email-Adresse ein" value="">
             <label>Telefonnummer</label>
             <input type="tel" name="tel" placeholder="Bitte geben Sie Ihre Telefonnummer ein" value="">
           </div>
           <div class="">
             <label>Nachricht</label>
             <textarea placeholder="Bitte geben Sie Ihre Nachricht ein" name="nachricht" rows="8" cols="40"></textarea>
             <button type="submit" name="submit" value="">Nachricht Abschicken</button>
</div>
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.342
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben