我正在为网站创建联系我们表单。我正在使用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))
}
?>
非常感谢任何帮助。
答案 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以外的其他功能。
如果您从自己的服务器收到邮件,则表示您的代码是正确的。您 可以将其部署到服务器上,并在必要时以相同的方式配置它。