如何使用jQuery和POST发送电子邮件

时间:2017-08-31 05:06:43

标签: php jquery function email post

更新:最终的工作代码位于问题的最底层我离开了剩下的代码,所以你可以看到这个过程希望它能帮助将来的某个人。

我正在尝试使用jQuery和外部php文件向我自己发送电子邮件(这是有效的),但是,电子邮件并没有获取任何数据。我有以下代码。

HTML

<section>
    <form enctype="multipart/form-data">
        <fieldset class="margin-b">
            <legend>Contact Me</legend>
            <label for="form_name">Name:<input name="form_name" id="form_name" type="text" value="" required autofocus ></label>
            <label for="form_email">Email:<input type="email" name="form_email" id="form_email" value=""></label>
            <label for="form_msg">Message:<textarea name="form_msg" id="form_msg" rows="5"></textarea></label>
        </fieldset>
        <input type="submit" name="submit" id="submit" value="Submit">
    </form>
</section>

JS

var data = {
  name: $("#form_name").val(),
  email: $("#form_email").val(),
  message: $("#form_message").val()
};
$.ajax({
  type: "POST",
  url: "email-php.php",
  data: data,
  success: function(){
    $('.success').fadeIn(1000);
  }
});

PHP

<?php
if($_POST){
  $name = $_POST['name'];
  $email = $_POST['email'];
  $message = $_POST['message'];

  //send email
  mail("email@domain.com", "From: " .$email, $message);
}
?>
编辑:我从Stack Overflow上的各种答案中取得了上述内容,但无法弄清楚我错过了什么或做错了什么。我在这里提出了大部分问题jQuery AJAX form using mail() PHP script sends email, but POST data from HTML form is undefined

更新:在@inarilo的建议下面我已将所有内容更改为以下内容,现在我根本没有收到任何电子邮件。这绝对是更好的选择,所以我想让它发挥作用。

HTML

    <section>
    <form enctype="multipart/form-data" id="frmemail">
        <fieldset class="margin-b">
            <legend>Contact Me</legend>
            <label for="form_name">Name:<input name="form_name" type="text" value="" required autofocus ></label>
            <label for="form_email">Email:<input type="email" name="form_email" value=""></label>
            <label for="form_msg">Message:<textarea name="form_msg" rows="5"></textarea></label>
        </fieldset>
        <input type="submit" name="submit" id="submit" value="Submit">
    </form>
</section>

JS

$.ajax({
  type: "POST",
  url: "email-php.php",
  data: $("#frmemail").serialize(),
  success: function(){
    $('.success').fadeIn(1000);
  }
});

PHP

<?php
if(isset($_POST['name'],$_POST['email'],$_POST['message'])){
  $name = $_POST['form_name'];
  $email = $_POST['form_email'];
  $message = $_POST['form_msg'];

  //send email
  mail("landon@thecallfamily.com", "From: " .$email, $message);
}
?>

最终工作守则

HTML

<section>
  <form enctype="multipart/form-data" id="frmemail">
    <fieldset class="margin-b">
      <legend>Contact Me</legend>
      <label for="form_name">Name:<input name="form_name" type="text" value="" required autofocus ></label>
      <label for="form_email">Email:<input name="form_email" type="email" value=""></label>
      <label for="form_msg">Message:<textarea name="form_msg" rows="5"></textarea></label>
    </fieldset>
    <input type="submit" name="submit" id="submit" value="Submit">
  </form>
</section>

JS

$(document).ready(function() {
  $('#frmemail').submit(function(event) {
    $.ajax({
      type: 'POST',
      url: 'email-php.php',
      data: $('#frmemail').serialize(),
      success: function() {
        $('.success').fadeIn(1000)
      }
    })
  })
})

PHP

<?php
$name = $_POST['form_name'];
$email = $_POST['form_email'];
$message = $_POST['form_msg'];

$to = "landon@thecallfamily.com";
$subject = "RIA Emails";
$body = "Name: ".$name."\nEmail: ".$email."\nMessage: ".$message;
$headers = "From: " . $email;

//send email
mail($to, $subject, $body, $headers);
?>

3 个答案:

答案 0 :(得分:1)

你试图通过使用错误的id获取textarea值,它应该是:

message: $("#form_msg").val()

不是

message: $("#form_email").val()

并在php文件中,替换以下内容:

$message = $_POST['text'];

$message = $_POST['message'];

它是:)

答案 1 :(得分:1)

您有多个错误,首先您使用元素ID来获取数据:

name: $("#form_name").val(),
email: $("#form_email").val(),
message: $("#msg_text").val()

但输入元素本身没有定义id属性。

其次,您传递姓名,电子邮件和消息,但在您的PHP中,您使用的是姓名,电子邮件和短信:

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['text'];

然而,即使所有这些都不正确地复杂化,您也可以只需serialize表格:

在HTML中,向表单添加id:

<form enctype="multipart/form-data" id="frmemail">

在JS中,选择表单并序列化它:

$(document).ready(function(){
  $("#frmemail").submit(function(event){
    event.preventDefault();
    $.ajax({
      type: "POST",
      url: "email-php.php",
      data: $("#frmemail").serialize(),
      success: function(){
        $('.success').fadeIn(1000);
      }
    });
  });
});

在PHP中只使用元素名称,你不需要id:

$name = $_POST['form_name'];
$email = $_POST['form_email'];
$message = $_POST['form_msg'];

答案 2 :(得分:0)

试试这个,(假设你已经在输入表单上输入了id名称) JQUERY:

$(document).ready(function(){
    $('#submit').on('click',function(){
       var name = $('#name').val(),
       var name = $('#email').val(),
       var name = $('#message').val();

        $.ajax({
        type: "POST",
        url: "email-php.php",
        data: {name:name,email:email,message:message},
        success: function(data){
             alert(data);
        }
        });
    });     
});

PHP:

if(isset($_POST['name'],$_POST['email'],$_POST['message'])){
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message']; 

    echo $name; // then echo $email and then $message
}