2016-08-30 5 views
0

Kürzlich hatte ich Probleme mit meinem PHP-Kontaktformular. Es funktioniert seit ungefähr zwei Jahren großartig, und ich habe nichts geändert, daher verstehe ich nicht wirklich, was das Problem ist. Hier ist der Code:PHP-Kontaktformular sendet Nachricht über Absenderadresse

<?php 

     // Check for header injections 
     function has_header_injection($str) { 
      return preg_match ("/[\r\n]/", $str); 
     } 

     if(isset ($_POST['contact_submit'])) { 

      $name = trim($_POST['name']); 
      $email = trim($_POST['email']); 
      $tel = trim($_POST['tel']); 
      $msg = $_POST['message']; 

      // check to see if name or email have header injections 
      if (has_header_injection($name) || has_header_injection($email)){ 

       die();   

      } 

      if (!$name || !$email || !$msg) { 

       echo '<h4 class="error">All Fields Required</h4><a href="page.php" target="_blank" class="button link">Go back and try again</a>'; 
       exit; 

      } 

      // add the recipient email to a variable 
      $to = "[email protected]"; 

      // Create a subject 
      $subject = "$name sent you an email"; 

      // construct your message 
      $message .= "Name: $name sent you an email\r\n"; 
      $message .= "Telephone: $tel\r\n"; 
      $message .= "Email: $email\r\n\r\n"; 
      $message .= "Message:\r\n$msg"; 



      $message = wordwrap(message, 72); 

      // set the mail header 
      $headers = "MIME=Version: 1.0\r\n"; 
      $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 
      $headers .= "\r\nFrom: " . $name . " \r\n\r\n" . $tel . " \r\n\r\n " . $msg . "\r\n\r\n <" . $email . "> \r\n\r\n"; 
      $headers .= "X-Priority: 1\r\n"; 
      $headers .= "X-MSMail-Priority: high\r\n\r\n"; 

      // Send the Email 
      mail($to, $subject, $message, $headers);  

     ?> 

     <!--- END PHP CONTACT FORM --> 

     <!-- Show Success message --> 
     <h2>Thanks for contacting Us!</h2> 
     <p align="center">Please allow 24 hours for a response</p> 
     <p><a href="index.php" class="button block">&laquo; Go to Home Page</a></p> 

     <?php } else { ?> 

     <form method="post" action="" id="contact-form"> 

      <label for="name">Your Name</label> 
      <input type="text" id="name" name="name"> 

      <label for="tel">Your Phone Number</label> 
      <input type="tel" id="tel" name="tel"> 

      <label for="email">Your Email</label> 
      <input type="email" id="email" name="email"> 

      <label for="message">the date/time you wish to sign up for</label> 
      <textarea id="message" name="message"></textarea> 
      <br> 

      <input type="submit" class="button next" name="contact_submit" value="Sign Up"> 




     </form> 

     <?php } ?> 

Wenn jedoch der Kontakt Formular abgeschickt wird, statt die Informationen an den Körper der E-Mail zu senden, sendet es in der „Aus“ der E-Mail. Zum Beispiel könnte die E-Mail sagen:

To: Web Developer

Von: Bob Smith 888-888-8888 Montag, Mittwoch fridays

Betreff: Bob Smith gesendet Sie eine E-Mail!

Körper: X-Priority: 1X-MSMail-Priorität: hoch

Nachricht

Ich weiß nicht wirklich, was los ist, so würde jede Hilfe dankbar!

+0

'$ headers = "\ r \ nVon:".. $ name. "\ r \ n \ r \ n". $ tel. "\ r \ n \ r \ n". $ msg. "\ r \ n \ r \ n <". $ email. "> \ r \ n \ r \ n"; Diese Zeile haben alle Ihre POST-Daten ' –

Antwort

0

Sie fügen alle diese Informationen in der Kopfzeile "from" hinzu.

$headers .= "\r\nFrom: " . $name . " \r\n\r\n" . $tel . " \r\n\r\n " . $msg . "\r\n\r\n <" . $email . "> \r\n\r\n"; 

ändern Header dazu:

$headers = "MIME=Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 
$headers .= "From: {$name} <{$email}>\r\n"; // Removed all extra variables 
$headers .= "X-Priority: 1\r\n"; 
$headers .= "X-MSMail-Priority: high\r\n"; 

und es sollte funktionieren.

Sie senden bereits die $message, die alle oben genannten Daten im Körper enthält.

Warum Sie dies noch nicht erlebt haben, ist jedoch ein Rätsel.

HINWEIS: Sie müssen nach jeder Kopfzeile nur eine \r\n haben.

Sie sollten auch diese Zeile ändern:

$message = wordwrap(message, 72); 

zu

$message = wordwrap($message, 72); // Adding $ in front of the variable. 
+0

Dies wird alle Informationen in der von Bar los (ich weiß nicht, warum ich es dort an erster Stelle), aber die Nachricht noch nicht sendet. Im Text der E-Mail wird nur das Wort "Nachricht" angezeigt. –

+0

Meine Antwort wurde aktualisiert. Sie hatten '$ message = wordwrap (message, 72);' wenn es '$ message = wordwrap ($ message, 72) sein sollte;'. Bezüglich des "From" -Feldes sollte es nur den Namen und die E-Mail enthalten, nicht die komplette Nachricht, also ja .. das würde es entfernen. :) –

+0

Sendet es nicht oder wird es gesendet, aber nur mit "Nachricht" im Körper? Wenn es Letzteres ist, sollte das Update das lösen. –

Verwandte Themen