我已经构建了一个通过Ajax提交的表单,然后用PHP中的mail()函数进行处理。表单验证和表单提交工作得很好(我可以控制台记录数据并接收成功消息),但是我没有收到来自表单的任何电子邮件。我假设它是process.php.
这是我第一次这样做,所以任何指针/代码的改进都会非常感激。
Javascript:var name = $('#name').val();
var email = $('#email').val();
var message = $('#message').val();
var dataString = 'name=' + name + '&email=' + email + '&message=' + message;
$.ajax({
type: "POST",
url: "process.php",
data: dataString,
success: function () {
alert('success');
}
});
PHP: <?php
$myemail = "name@example.com";
$subject = "Subject";
$message = "
Name: $name
E-mail: $email
Message: $message
";
mail($myemail, $subject, $message);
?>
我认为问题确实存在于php mail()方法中。只需通过注释掉mail()调用并将其替换为
来确保它是正确的。echo 'I should be sending mail now!';
exit;
然后将ajax调用更改为:
$.ajax({
type: "POST",
url: "process.php",
data: dataString,
success: function (response) {
alert(response);
}
});
现在将表单发送到服务器,并查看警报框中出现的内容。如果您得到了预期的字符串,那么您确实应该设置一个smtp服务器,以便可以发送邮件。另一个选择是使用外部邮件服务器,但它要求你在其他地方有一个合适的电子邮件帐户。
有很多脚本,比如phpmailer
多亏了别人的帮助,我终于解决了这个问题。
Ajax一切都很好,正如所料。邮件没有发送,因为它在本地运行,而不是使用我的服务器邮件PHP。并且表单中的数据没有被引用,因此返回空白电子邮件。
所以,这就是最终的工作:
<?php
$myemail = "name@example.com";
$subject = "Subject";
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$body = "
Name: $name
Email: $email
Message: $message
";
mail($myemail, $subject, $body);
?>