草庐IT

PHP mail() 在收到 ajax POST 请求时不起作用

coder 2024-05-03 原文

我设置了一个表单,该表单使用 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 = "myemail@gmail.com";
    $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);
}

Web 托管是 Windows,我已经尝试使用 POST 请求,但它工作正常,我收到了电子邮件。我不认为这是 php.ini 的问题?

最佳答案

您的第一个问题是您在服务器端使用 $_POST['dataObj'] 而数据仅在 $_POST 中可用(dataObj 是一个不会传递到服务器的 javascript 变量名称)。例如,您可以通过阅读 $_POST['email'] 来获取电子邮件。尝试将您的 send.php 更改为:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $to_email = "myemail@gmail.com"; 

  $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 而不进行某种转义是不安全的。如果你这样离开,攻击者可以设置额外的参数。在将其用于生产之前先谷歌一下。

如果您收到 200,可能是发送过程中的某些东西比您的 linux 设置更容易阻止标题格式错误的邮件。 但是,您应该收到一封格式错误的电子邮件,其中包含您提供的 php 代码,对吗?回答这个帖子,以防错误仍然发生。

关于PHP mail() 在收到 ajax POST 请求时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28644162/

有关PHP mail() 在收到 ajax POST 请求时不起作用的更多相关文章

  1. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  2. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  3. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  4. ruby-on-rails - 我更新了 ruby​​ gems,现在到处都收到解析树错误和弃用警告! - 2

    简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und

  5. ruby-on-rails - 如何在发布新的 Ruby 或 Rails 版本时收到通知? - 2

    有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:

  6. ruby-on-rails - "assigns"在 Ruby on Rails 中有什么作用? - 2

    我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o

  7. ruby - HTTP 请求中的用户代理,Ruby - 2

    我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)

  8. ruby-on-rails - 获取并发布相同匹配项的请求 - 2

    在我的路线文件中我有:match'graphs/(:id(/:action))'=>'graphs#(:action)'如果是GET请求(工作)或POST请求(不工作),我想匹配它我知道我可以使用以下方法在资源中声明POST请求:post'/'=>:show,:on=>:member但是我怎样才能为比赛做到这一点呢?谢谢。 最佳答案 如果你同时想要POST和GETmatch'graphs/(:id(/:action))'=>'graphs#(:action)',:via=>[:get,:post]编辑默认值可以设置如下match'g

  9. ruby - 字符串文字前面的 * 在 ruby​​ 中有什么作用? - 2

    这段代码似乎创建了一个范围从a到z的数组,但我不明白*的作用。有人可以解释一下吗?[*"a".."z"] 最佳答案 它叫做splatoperator.SplattinganLvalueAmaximumofonelvaluemaybesplattedinwhichcaseitisassignedanArrayconsistingoftheremainingrvaluesthatlackcorrespondinglvalues.Iftherightmostlvalueissplattedthenitconsumesallrvaluesw

  10. ruby - 为什么这个 eval 在 Ruby 中不起作用 - 2

    你能解释一下吗?我想评估来自两个不同来源的值和计算。一个消息来源为我提供了以下信息(以编程方式):'a=2'第二个来源给了我这个表达式来评估:'a+3'这个有效:a=2eval'a+3'这也有效:eval'a=2;a+3'但我真正需要的是这个,但它不起作用:eval'a=2'eval'a+3'我想了解其中的区别,以及如何使最后一个选项起作用。感谢您的帮助。 最佳答案 您可以创建一个Binding,并将相同的绑定(bind)与每个eval相关联调用:1.9.3p194:008>b=binding=>#1.9.3p194:009>eva

随机推荐