首页 > 解决方案 > 调用 PHP 通过 Javascript 发送电子邮件

问题描述

我有一个 HTML 网页,并且正在尝试使用 Javascript 调用单独的 PHP 页面来发送电子邮件。我知道在大多数情况下这是一个不必要的步骤,但我使用的 Java 框架不支持 PHP 文件,所以我需要解决这个问题。我正在使用 JQuery 访问 PHP,但是每当我尝试发送电子邮件时,我都会收到来自 PHP 的错误提示[object Object] error Not found。有什么建议或想法吗?

这是我的 HTML:

     <form name="feedback-form" id="feedback-form" class="w3-center">
        <h4 class="w3-center" style="max-width:1000px;align-content:center;"><label>Your email address</label></h4>
        <input id="email" style="max-width:300px;margin-left:auto;margin-right:auto" class="w3-center w3-input w3-border" name="email" placeholder="name@website.com" required>          
        <h4 class="w3-center" style="max-width:1000px;"><label>Feedback</label></h4>
        <textArea id="message" cols="10" rows="5" class="w3-center w3-input w3-border" name="message"></textArea>
        <h4 class="w3-center" style="max-width:1000px;" id="ifSuccess"></h4>
        <h4><button style="max-width:250px;margin-left:auto;margin-right:auto" class="w3-button w3-black w3-round w3-hover-light-grey w3-center" onclick="sendMail()" type ="button" name="submit" id="submit">Enter</button></h4>
     </form>

这是我的 Javascript 函数 sendMail():

<script>
function sendMail() {
    $.ajax({
        type: "POST",
        url: "email.php", 
        data: {email: $("#email").val(),
            message: $("#message").val()},
        success: function () {$("#ifSuccess").html("Message sent successfully!");},
        error: function (req, status, error) {alert(req + " " + status + " " + error);}
        }); 
};
</script>

而且 - 在一个名为 email.php 的单独文件中,这是我的 PHP:

<?php 
    $email = $_POST['email'];
    $text = $_POST['message'];
    $to = "recipient@gmail.com";
    $from = $email;
    $subject = "Form submission";
    $subject2 = "Form submission copy";
    $message = "You have received the following feedback email:" . "\n\n" . $text;
    $message2 = "Here is a copy of your message " . "\n\n" . $text;
    $headers = "From:" . $from;
    $headers2 = "From:" . $to;
    mail($to,$subject,$message,$headers);
    mail($from,$subject2,$message2,$headers2);
?>

先感谢您!

标签: javascriptphphtmljquery

解决方案


我猜这是因为 Ajax 不能正常传递值。并且标签名称也是错误的。

所以试试这个。

HTML

<form id="feedback-form" class="w3-center" name="feedback-form">
   <h4 class="w3-center" style="max-width: 1000px; align-content: center;">
     <label>Your email address</label>
   </h4>
   <input id="email" class="w3-center w3-input w3-border" name="email" placeholder="name@website.com" style="max-width: 300px; margin-left: auto; margin-right: auto;" required/>
   <h4 class="w3-center" style="max-width: 1000px; align-content: center;">
     <label>Feedback</label>
   </h4>
   <textarea id="message" class="w3-center w3-input w3-border" name="message" cols="10" rows="5"></textarea>
   <h4 id="ifSuccess" class="w3-center" style="max-width: 1000px; align-content: center;"></h4>
   <h4>
     <button id="submit" class="w3-button w3-black w3-round w3-hover-light-grey w3-center" onclick="sendMail()" type="button" name="submit" style="max-width: 250px; margin-left: auto; margin-right: auto;">
        Enter
     </button>
   </h4>
</form>

JavaScript

<script>
   function sendMail() {
      $.ajax({
          type: "POST",
          url: "./email.php",
          data: $("#feedback-form").serialize(),
          success: function () {
             $("#ifSuccess").html("Message sent successfully!");
          },
          error: function (req, status, error) {
             alert(req + " " + status + " " + error);
          }
      });
   }
</script>

我假设您使用的 PHP 代码与您最初编写的完全一样。


推荐阅读