外部PHP电子邮件请求响应500内部服务器错误

时间:2016-10-30 13:53:06

标签: php jquery ajax email internal-server-error

我正在为网站创建联系我们表单。我正在使用jquery为html按钮创建一个.click()函数。然后使用ajax调用email.php代码。当我单击按钮时,控制台显示以下错误:

500(内部服务器错误)。

我是新手ajax和php一起使用所以我不知道该做什么。

以下是HTML表单:

                 

    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src = "js/callmail.js"></script>

</head>

<body ng-app = "">

            <div class = "container">

    <form name = "contact">

        <label for = "subject" class = "control-label">Subject:</label>
        <input name = "subject" id = "subject" ng-model = "subject" required/>
        <span class = "warning" ng-show="contact.subject.$touched && contact.subject.$invalid">You Must Enter a subject!</span>
        <span class = "success" ng-show="contact.subject.$touched && contact.subject.$valid">Valid!</span>

        <br/>

        <label for = "body" class = "control-label">Body:</label>
        <input name = "body" id = "body" ng-model = "body" required/>
        <span class = "warning" ng-show="contact.body.$touched && contact.body.$invalid">Your email must have a body!</span>
        <span class = "success" ng-show="contact.body.$touched && contact.body.$valid">Valid!</span>

        <br/>

        <label for = "signature" class = "control-label">Return Email:</label>
        <input name = "signature" id = "signature" ng-model = "signature" type = "email" required/>
        <span class = "warning" ng-show="contact.signature.$touched && contact.signature.$invalid">You must enter a valid return email!</span>
        <span class = "success" ng-show="contact.signature.$touched && contact.signature.$valid">Valid!</span>

        <br/>

        <button ng-disabled = "contact.$invalid" id = "sendmail" type = "submit" class = "btn btn-success">Submit</button>

    </form>

    </div>

这里是对php代码的jQuery / AJAX调用:

$(function(){

$("#sendmail").click(function() {

    var data = {

        to: "myemail",
        subject: $("#signature").val() + ": " + $("#subject").val(),
        message: $("#body").val()   
    }

    $.ajax({

        type: "POST",
        url: "email.php",
        data: data,
        success: function() {

            alert("Message sent");

        }

    });

    console.log(data);

});

});

最后,这是负责发送电子邮件的PHP代码:

<?php   
    if ($_POST["submit"]) { 

        $subject = $_POST["subject"];
        $message = $_POST["message"];
        $headers = "From: " . $_POST["name"] . "Reply to: " . $_POST["signature"];

        mail("myemail", $subject, $message, $headers)) 

    }

?>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

错误500的问题是它不具体。它只是意味着“出了问题”。仅使用Error 500就无法诊断出任何东西。

您需要了解的是导致错误500的原因,如果您知道它在哪里,则会出现在PHP错误日志中。

我问你的第一个问题是 - 你在运行PHP的环境是什么?它是在您的计算机上还是在与Internet服务提供商的Web服务器上?如果您没有在PC上运行开发环境,我强烈建议您安装XAMPP这样简单的东西并在那里开发。它对于高级开发人员来说并不理想,但是为了学习PHP,这很好。尤其是因为它写出了您可以实际访问和阅读的正确错误日志:)

另一件事是查看PHP文档,它提供了一些有关邮件功能的便捷信息:

http://php.net/manual/en/mail.requirements.php

如您所见 - mail()期望在具有sendmail命令访问权限的系统上运行。如果您运行php的系统没有sendmail或者可能没有sendmail,那么这可能是您的问题。但是,如果没有错误日志,我会猜测。

所以我的建议是首先尝试本地安装PHP。此外,在本地运行PHP(例如使用xampp)时,您必须设置SMTP服务器详细信息 - 服务器,用户名和密码以及用于发送邮件的安全详细信息。但是您可以访问更全面的日志和错误信息。

答案 1 :(得分:0)

首先,您应该提交&#34;提交&#34;键入您的JavaScript代码。

$("#sendmail").click(function() {

    var data = {
        to: "youremail@gmail.com",
        subject: $("#signature").val() + ": " + $("#subject").val(),
        message: $("#body").val(),
        signature: $('#signature').val(),
        name: "Your name",
        submit: true //You'll receive $_POST['submit'] in email.php
    }

    $.ajax({
        type: "POST",
        url: "email.php",
        data: data,
        success: function() {
            alert("Message sent");

        }
    });
});

我刚在数据变量中添加了一些行。不要忘记 PHP中$ _POST数组中收到的数据与您在ajax方法中发送的数据相同 在您发布的代码中,$ _POST [&#39; name&#39;]未定义。

<?php   
if ($_POST["submit"]) { 
    $subject = $_POST["subject"];
    $message = $_POST["message"];
    $headers = "From: " . $_POST["name"] . "Reply to: " . $_POST["signature"];
    //Use the receiver email you've set in your JS
    $to = $_POST['to'];

    mail($to, $subject, $message, $headers)) 

}

?>

然后,正如在另一个答案中所说的那样,您应该尝试在自己的PC上进行开发,并且只有在您的网站完成后才能将其部署到您的服务器上。

例如,在基于Debian的操作系统上,您可以使用它:

$ sudo apt-get install apache2 mysql-server php5

此命令将在您的PC上安装Apache Web服务器,MySQL服务器和PHP 5。或者,正如在另一个答案中所说,你可以使用XAMP做同样的事情。

运行网站后,您可以将服务器配置为发送电子邮件。 This post解释如何配置php.ini以使用您自己的邮件地址。当然,如果需要,您可以使用Gmail以外的其他功能。

如果您从自己的服务器收到邮件,则表示您的代码是正确的。您 可以将其部署到服务器上,并在必要时以相同的方式配置它。