【问题标题】:How to send an email using jQuery and POST如何使用 jQuery 和 POST 发送电子邮件
【发布时间】:2018-02-08 22:38:58
【问题描述】:

更新:最终的工作代码位于问题的最底部,我留下了其余代码,因此您可以看到该过程,希望它对未来的人有所帮助。

我正在尝试仅使用 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

更新:在下面@inailo 的建议之后,我已将所有内容更改为以下内容,现在我根本没有收到电子邮件。这绝对看起来是更好的选择,所以我想让它工作。

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);
?>

【问题讨论】:

  • 更多错字,没有你用 ajax 发布的“文本”。
  • @tan 你能进一步解释一下吗?
  • ok @LandonCall Amrinder Singh 的回答是正确的。
  • 还是不行,它的#form_msg 不是#form_message :-)

标签: php jquery function email post


【解决方案1】:

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

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

不是

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

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

$message = $_POST['text'];

$message = $_POST['message'];

就是这样:)

【讨论】:

  • 不确定它是如何更改为 #form_email 的,它曾经是 #form_msg。但上述更改仍然无效。我觉得奇怪的是我输入的数据正在进入 URL。我以为POST不会发生这种情况?我将更新我的代码以包含上述修复。
  • 好的,我已经调整了我的问题以包含您的所有修复,但我的电子邮件仍然进入我的收件箱空白。
  • 请不要编辑问题中的原始代码 - 否则可能会使答案看起来不正确/不正确。如果您想添加更新,那么只需添加到末尾,说明发生了什么变化——常见的约定包括添加像 Update: 这样的标题
  • 谢谢@SamOnela,从现在开始我想有办法查看过去的编辑。
  • 应该是$("#form_msg"),你又放错了,现在你把它写成“form_message”,应该是“form_msg”
【解决方案2】:

试试这个,(假设您在输入表单上输入了 id 名称) 查询:

$(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
}

【讨论】:

  • 仍然没有数据。我以为我根本没有收到电子邮件,但我不小心有两个 .com
  • 您是否尝试过检查您尝试在 php.ini 中使用的数据。如果没有,请先回显这些数据,然后使用 :success: function(data){ alert(data); 让它显示在您的 jquery 代码中}
  • 我尝试这样做,但我认为我做错了,现在使用新代码我不知道如何将其回显,因为它没有被保存到对象中。
  • 首先,我建议将 id 名称放在您的输入表单上。然后在您的 jquery 中调用 then :例如: $('#submit').on('click',function(){ var name = $('#name').val(), email = $('#email ').val(); alert(name or email); // 首先检查是否从输入表单中获取数据 });
【解决方案3】:

您有多个错误,首先您使用元素 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'];

【讨论】:

  • 我已根据您的建议更新了我的代码,但仍然无法正常工作。在我看来,一切都被添加到 URL 中似乎很奇怪。如果你愿意的话,你可以在我的服务器上测试这个3760.ljazzstudios.com/email-post/jquery.php
  • 提交表单后,我的网址变成了3760.ljazzstudios.com/email-post/…,这正常吗?
  • 你能用完整的 js 代码更新你的问题吗?
  • 表单正在提交,默认的表单方法是GET,但你真正需要的是阻止它提交。
  • 现在我的提交按钮没有任何作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2018-05-19
  • 2017-12-25
  • 1970-01-01
  • 2022-07-27
  • 2017-07-21
相关资源
最近更新 更多