2016-08-30 51 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

它是不是发送或它发送,但只是在身体的“消息”?如果是后者,更新应该可以解决这个问题。 –

相关问题