2016-08-30 96 views
0

最近我一直有我的PHP聯繫表格的問題。它工作了兩年,我沒有改變任何東西,所以我不太明白問題所在。下面的代碼:PHP聯繫表格通過發件人地址發送郵件地址

<?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 } ?> 

然而,當接觸形式提交的,而不是將信息發送到電子郵件的正文中,它發送它在「發件人」電子郵件的部分。例如,電子郵件可能會說:

要:Web開發

來源:鮑勃·史密斯888-888-8888週一,週三週五

主題:鮑勃·史密斯給你發一封電子郵件!

身體: X優先:1X-MSMAIL優先:高

消息

我真的不知道發生了什麼事情,所以任何幫助,將不勝感激!

+0

'$頭= 「\ r \ n從:」。 $名稱。 「\ r \ n \ r \ n」。 $ tel。 「\ r \ n \ r \ n」。 $味精。 「\ r \ n \ r \ n <」。 $電子郵件。 「> \ r \ n \ r \ n」;這條線有你所有的POST數據 ' –

回答

0

您將在「from」標題中添加所有信息。

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

改變你的頭到這一點:

$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"; 

,它應該工作。

您已經發送了$message,其中也包含上述所有數據。

爲什麼你以前沒有經歷過這個事情卻是一個謎。

注意:每個標頭後只需要有一個\r\n

你也應該改變該行:

$message = wordwrap(message, 72); 

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

這擺脫了欄中的所有信息(我不知道爲什麼我把它放在第一位),但郵件仍然沒有發送。在電子郵件的正文中,它只顯示單詞'message' –

+0

更新了我的答案。你有'$ message = wordwrap(message,72);'它應該是'$ message = wordwrap($ message,72);'。關於「From」字段......它應該只包含名稱和電子郵件,而不是完整的消息,所以是的..這將刪除它。 :) –

+0

它是不是發送或它發送,但只是在身體的「消息」?如果是後者,更新應該可以解決這個問題。 –

相關問題