接收Ajax POST请求时,PHP mail()无法正常工作

庞蒂亚克

我已经设置了一个使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

接收Ajax POST请求时,PHP mail()无法正常工作

来自分类Dev

PHP无法从Ajax请求中接收参数

来自分类Dev

PHP无法从js文件接收AJAX POST

来自分类Dev

无法在 PHP 中接收 AJAX POST 数据

来自分类Dev

PHP Ajax无法正常工作

来自分类Dev

AJAX / PHP无法正常工作

来自分类Dev

php函数mail()无法正常工作

来自分类Dev

WordPress的ajax请求无法正常工作

来自分类Dev

简单的Ajax请求Laravel无法正常工作

来自分类Dev

无法接收通过AJAX POST发送到PHP的值

来自分类Dev

无法接收数据,ajax,javascript,jquery,php

来自分类Dev

无法使用 AJAX 接收 PHP 对象

来自分类Dev

Ajax POST 工作正常,但 php 文档无法获取数据变量

来自分类Dev

php的AJAX调用无法正常工作

来自分类Dev

Ajax生成的PHP表单无法正常工作

来自分类Dev

Ajax发布到PHP无法正常工作

来自分类Dev

我的Ajax php代码无法正常工作

来自分类Dev

从ajax请求接收数组

来自分类Dev

无法通过Rest API从客户端Ajax POST请求接收数据

来自分类Dev

通过AJAX请求选择的附加选项无法正常工作

来自分类Dev

Django:Ajax POST发送对象数组的数据无法正常工作

来自分类Dev

当我执行执行注册或登录的 ajax 请求时,它无法正常工作

来自分类Dev

Ajax无法正常工作

来自分类Dev

Ajax无法正常工作

来自分类Dev

Ajax 无法正常工作

来自分类Dev

重写模式(.htaccess)活动时,jQuery ajax无法正常工作

来自分类Dev

通过AJAX加载页面时jQuery无法正常工作

来自分类Dev

$ .ajax在使用fullcalendar js时无法正常工作吗?

来自分类Dev

AJAX请求提交,但不接收POST值