尝试提交此电子邮件表单时不断出错

时间:2019-03-29 14:03:00

标签: php jquery html ajax email

我制作了一个表格,可以通过电子邮件将在字段中输入的信息通过电子邮件发送出去,但填写时出现错误。

  

无法发送邮件!请检查您的PHP邮件配置。

所有代码似乎都不错,但是我找不到错误的原因。一旦我尝试提交表单,就会显示该错误(这是一条错误消息,旨在显示在发送邮件错误中)。任何帮助都将不胜感激!

我应该提到目录中有2种形式;表格“ 1”使用JS和PHP文件的“ 1”版本,表格“ 2”使用“ 2”版本的。它们不共享JS和PHP文件。

<form id="email-form2" name="email-form2" method="POST" data-name="Insurance Form">
  Enter Name
  <input class="w-input text-field" id="name" type="text" placeholder="First name and last name" name="name" data-name="Name" required> Email
  <input class="w-input text-field" id="email" type="email" name="email" placeholder="Enter your email address" data-name="Email" required> Date of Birth
  <input class="w-input text-field" id="date" type="date" name="date" data-name="Date" required> Gender
  <input class="w-input text-field" id="gender" type="text" placeholder="Male or Female" name="gender" data-name="Gender" required> Member ID
  <input class="w-input text-field" id="member" type="text" placeholder="Member number" name="member" data-name="Member" required> Policy ID
  <input class="w-input text-field" id="policy" type="text" placeholder="Policy number" name="policy" data-name="Policy" required>
  <div class="div-spc">
    <button class="w-button button no-margin" type="submit">Submit Form</button>
  </div>
</form>
<?php
  if($_POST) 
  {
    $to_Email = "email@email.com"; //Replace with recipient email address

    //check if its an ajax request, exit if not
    if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') 
    {   
      //exit script outputting json data
      $output = json_encode(array(
        'type'=> 'error',
        'text' => 'Request must come from Ajax'
      ));

      die($output);
  }

  //check $_POST vars are set, exit if any missing
  if (!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userDate"]) || !isset($_POST["userGender"]) || !isset($_POST["userMember"]) || !isset($_POST["userPolicy"])) 
  {
    $output = json_encode(array('type'=>'error', 'text' => 'Input fields are empty!'));
    die($output);
  }

  //additional php validation
  if (empty($_POST["userName"])) 
  {
    $output = json_encode(array('type'=>'error', 'text' => 'Name is too short or empty!'));
    die($output);
  }

  if (!filter_var($_POST["userEmail"], FILTER_VALIDATE_EMAIL)) 
  {
    $output = json_encode(array('type'=>'error', 'text' => 'Please enter a valid email!'));
    die($output);
  }

  if (empty($_POST["userMember"])) 
  {  
    $output = json_encode(array('type'=>'error', 'text' => 'Need Member ID number!'));
    die($output);
  }

  if (empty($_POST["userGender"])) 
  {
    $output = json_encode(array('type'=>'error', 'text' => 'Please enter Male or Female!'));
    die($output);
  }
  if (empty($_POST["userPolicy"])) 
  {
    $output = json_encode(array('type'=>'error', 'text' => 'Need Policy ID number!'));
    die($output);
  }

  if (empty($_POST["userDate"])) 
  {
    $output = json_encode(array('type'=>'error', 'text' => 'Please fill out birth date!'));
    die($output);
  }

  //proceed with PHP email.
  $headers = 'From: '.$_POST["userEmail"].'' . "\r\n" .
    'Reply-To: '.$_POST["userEmail"].'' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

  // send mail
  $sentMail = @mail($to_Email, $_POST["userName"], $_POST["userDate"], $_POST["userGender"], $_POST["userMember"], $_POST["userPolicy"], $headers);

  if (!$sentMail) 
  {
    $output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
    die($output);
  } else {
    $output = json_encode(array('type'=>'message', 'text' => 'Hi '.$_POST["userName"] .' Thank you for your email'));
    die($output);
  }
}
?>
$(document).on("ready", function() {
  $("#email-form2 [type='submit']").click(function(event) {
    event.preventDefault();
    //get input field values
    var user_name = $('input[name=name]').val()
    var user_email = $('input[name=email]').val()
    var user_date = $('input[name=date]').val()
    var user_gender = $('input[name=gender]').val()
    var user_member = $('input[name=member]').val()
    var user_policy = $('input[name=policy]').val()

    //data to be sent to server
    post_data = {
      'userName': user_name,
      'userEmail': user_email,
      'userGender': user_gender,
      'userMember': user_member,
      'userPolicy': user_policy,
      'userDate': user_date
    }

    //Ajax post data to server
    $.post('contact_me2.php', post_data, function(response) {
      //load json data from server and output message    
      if (response.type == 'error') {
        output = '<div class="error-message"><p class="from">' + response.text + '</p></div>'
      } else {
        output = '<div class="success-message"><p class="seuccses">' + response.text + '</p></div>'

        //reset values in all input fields
        $('#email-form2 input').val('')
      }
      $("#result").hide().html(output).slideDown()
    }, 'json')
  });

  //reset previously set border colors and hide all message on .keyup()
  $("#email-form2 input").keyup(function() {
    $("#result").slideUp()
  })
});

1 个答案:

答案 0 :(得分:0)

如果您查看documentation for mail(),您会看到该函数接受5个参数。

现在,您要在代码中发送多少个参数? (答案:7)。您知道这可能是个问题吗?另外,您在mail()的开头使用@,它将抑制可能导致的任何错误。

即使它没有错误,您也会在$ message参数之后为所有内容发送无意义的数据,这就是为什么它不起作用的原因。我希望您可能真的希望将所有这些各个字段(用户名,性别,日期,政策等)结合在一起,并以诸如空格和换行符之类的某种格式组合在一个字符串中,以使其形成一个连贯的消息正文-而不是只需在mail()函数中将它们全部触发,并希望将它们重新排列为可读的即可(显然,它不可能也不会)。

要开始,请尝试以下操作:

$subject = "Some subject";
$message = $_POST["userName"]." ".$_POST["userDate"]." ". $_POST["userGender"]." ".$_POST["userMember"]." ".$_POST["userPolicy"];
$sentMail = mail($to_Email, $subject, $message, $headers); 

我在这里

a)将主题和消息声明为单独的变量,以提高清晰度和可读性。

b)将各种POST字段值连接到一个字符串中,并用空格分隔。在PHP中,使用.运算符完成字符串的连接(也称为“串联”)-您只需将其放在要相互连接的两个字符串之间。

您可以自己在双引号区域内添加更多内容,然后根据自己的喜好更改主题行。