我已经设置了一个使用jQuery ajax将POST请求发送到外部php文件的表单,然后该文件发送电子邮件。我收到200状态代码,但没有收到电子邮件。
这是jQuery:
var ajaxSend = function(dataObj) {
$.ajax({
type: 'POST',
url: 'send.php',
data: dataObj,
success: function() {console.log('Ajax Success!');},
error: function() {console.log('Ajax Error!');},
statusCode: {
200: function() {console.log('200 Everything ok!');},
400: function() {console.log('400 Bad request');},
403: function() {console.log('403 Forbidden');},
500: function() {console.log('500 Server error');}
}
});
}
$('.contact-form input[type="submit"]').click(function(e) {
if($('form')[0].checkValidity()) { //checks if insetred value meets the HTML5 required attribute
e.preventDefault();
var dataObj = {
name: $.trim($('.contact-form input[type="text"]').val()),
email: $.trim($('.contact-form input[type="email"]').val()),
message: $.trim($('.contact-form textarea').val())
};
ajaxSend(dataObj);
} else { console.log("Invalid form"); }
});
这是php文件:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$to_email = "[email protected]";
$data = json_decode($_POST['dataObj']);
$subject = 'Email subject';
$headers = 'From: '.$data['email'];
$message = 'Name: '.$data['name'].' \n';
$message .= 'Email: '.$data['email'].' \n\n';
$message .= 'Message:\n'.$data['message'].' \n';
if (mail($to_email, $subject, $message, $headers)) {
http_response_code(200);
} else {
http_response_code(500);
}
} else {
http_response_code(403);
}
网页寄存是Windows,我尝试不使用POST请求而工作正常,我收到了电子邮件。我不认为这是php.ini问题?
您的第一个问题是,您正在$_POST['dataObj']
服务器端使用数据,而仅在其中可用$_POST
(dataObj是一个不会传递给服务器的javascript变量名称)。例如,您可以通过阅读获取电子邮件$_POST['email']
。尝试将您的send.php更改为此:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$to_email = "[email protected]";
$subject = 'Email subject';
$headers = 'From: '.$_POST['email'];
$message = 'Name: '.$_POST['name'].' \n';
$message .= 'Email: '.$_POST['email'].' \n\n';
$message .= 'Message:\n'.$_POST['message'].' \n';
if (mail($to_email, $subject, $message, $headers)) {
http_response_code(200);
} else {
http_response_code(500);
}
} else {
http_response_code(403);
}
注意:直接在$ headers变量中使用$ _POST而不进行某种转义是不安全的。如果您这样保留,攻击者可以设置其他参数。Google将其用于生产之前。
如果您收到200,则发送过程中的某些内容比Linux设置更容易阻止标头格式错误的邮件。但是,您应该使用提供的php代码收到格式错误的电子邮件,对吗?如果此后仍然发生错误,请回答此帖子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句