无法通过Laravel 5联系表发送电子邮件

时间:2017-08-13 06:29:36

标签: php jquery ajax forms laravel-5

我是Laravel的新手并尝试通过联系表单发送电子邮件。

这是html表单:

<form onsubmit="return false" method="post" id="contact_form" name="contact-form">          
   <input type="hidden" name="_token" value="{{ csrf_token() }}">
   <input type="text" placeholder="Full Name" name="fullname" id="fullname" required>
   <input placeholder="Email Address" required name="email" id="email">
   <button id="contact_btn"data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Sending" >Send Your Message</button>
</form>

这是控制器:

public function contactPost(Request $request) {
    $this->validate($request, [
        'email'=>'required|email',
        'fullname'=>'max:50',
        ]);
    $data = array(
        'email' => $request->email,
        'fullname' => $request->fullname,

        );
    Mail::send('emails.contact', $data, function($message) use ($data){
        $message->from($data['email']);
        $message->to('**@gmail.com');
    });
    return ['success' => true,];
}

这是路线:

Route::post('contact', 'PagesController@contactPost');

这是我在laravel.logs上可以找到的最后一个错误:

[2017-08-11 06:30:53] local.ERROR: ErrorException: Use of undefined constant csrf_token - assumed 'csrf_token' in C:\xampp\htdocs\paygizer\storage\framework\views\b9aff2e30c0efeff3b03704fbc6a957f360869cf.php:385

无论我做什么,错误都没有自昨天以来更新,我重启服务器好几次。

这是ajax电话:

$('#contact_form').submit(function(e) {
  e.preventDefault();
}).validate({ 
  rules: {
    fullname: {
      required: true,

    },
    email: {
      required: true,
      email: true
    },

  },
  submitHandler: function (form) {
    var btn = $('#contact_btn');
    btn.button('loading');
    setTimeout(function() {
      btn.button('reset');
    }, 8000);
    $.ajaxSetup({
        headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
      type: 'POST',
      url: "{{url('contact')}}",
  // data: form.serialize(),
  dataType: 'json',
  async: true,
  data: {
    fullname: $('#fullname').val(),
    email: $('#email').val(),
  },
  success: function (json) {
    $('#contact').hide();
    $('#output').html(
      '<i class="fa fa-check" aria-hidden="true" id="check" style="border-radius:50%;font-size:80px;text-align:center;color:#E81B00"></i><br><p class="lead" style="font-size:40px;">We have received your message!</p>'
      ).show();
  },
   error: function(data){
        alert(data);
    },
});
   return false; // for demo
   } 

});

Chrome开发者工具没有错误。当我点击提交时,按钮加载并没有任何反应。

1 个答案:

答案 0 :(得分:1)

1)尝试更换

<input type="hidden" name="_token" value="{{ csrf_token() }}">

{{ csrf_field() }}

2)因为它是一个ajax调用你确定csrf-token meta存在吗?

<meta name="csrf-token" content="{{ csrf_token() }}">