'How do I fix the POST 405 error for an email form (PHP) hosted on http-server?

I am new to PHP and jQuery. I wanted to test the functionality for the email contact form in PHP that I call from my jQuery file. I have been filling in the details on the form correctly, however, whenever I press the "Submit" button, I get 405 error.

To be more precise, I get "POST http://192.168.87.1:8080/js/inc/contactformhandler.php 405 (Method Not Allowed)" from jquery-3.4.1.min.js:2. I am running my website on http-server !.

My HTML form:

<div class="row contact-form">

        <div class="col-twelve">

            <!-- form -->
            <form name="contactForm" id="contactForm" method="POST">
                <fieldset>

                  <div class="form-field">
                           <input name="contactName" type="text" id="contactName" placeholder="Name" value="" minlength="2" required="">
                  </div>
                  <div class="form-field">
                       <input name="contactEmail" type="email" id="contactEmail" placeholder="Email" value="" required="">
                   </div>
                  <div class="form-field">
                           <input name="contactSubject" type="text" id="contactSubject" placeholder="Subject" value="">
                   </div>                       
                  <div class="form-field">
                        <textarea name="contactMessage" id="contactMessage" placeholder="message" rows="10" cols="50" required=""></textarea>
                   </div>                      
                 <div class="form-field">
                     <button class="submitform">Submit</button>
                     <div id="submit-loader">
                        <div class="text-loader">Sending...</div>                             
                          <div class="s-loader">
                                    <div class="bounce1"></div>
                                    <div class="bounce2"></div>
                                    <div class="bounce3"></div>
                                </div>
                            </div>
                  </div>

                </fieldset>
            </form> <!-- Form End -->

            <!-- contact-warning -->
            <div id="message-warning">              
            </div>            
            <!-- contact-success -->
            <div id="message-success">
               <i class="fa fa-check"></i>Your message was sent, thank you!<br>
            </div>

         </div> <!-- /col-twelve -->

    </div> <!-- /contact-form -->

JS code where I try to load the contactformhandler.php:

/* local validation */
    $('#contactForm').validate({

        /* submit via ajax */
        submitHandler: function(form) {

            var sLoader = $('#submit-loader');

            $.ajax({        

              type: "POST",
              url: "js/inc/contactformhandler.php",
              data: $(form).serialize(),
              beforeSend: function() { 

                sLoader.fadeIn(); 

              },
              success: function(msg) {

                // Message was sent
                if (msg == 'OK') {
                    sLoader.fadeOut(); 
                   $('#message-warning').hide();
                   $('#contactForm').fadeOut();
                   $('#message-success').fadeIn();   
                }
                // There was an error
                else {
                    sLoader.fadeOut(); 
                   $('#message-warning').html(msg);
                    $('#message-warning').fadeIn();
                }

              },
              error: function() {

                sLoader.fadeOut(); 
                $('#message-warning').html("Something went wrong with loader. Please try again.");
                 $('#message-warning').fadeIn();

              }

          });           
        }

    });

contactformhandler.php:

<?php
//Import PHPMailer classes into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
require '../vendor/autoload.php';

// Replace this with your own email address
$siteOwnersEmail = '[email protected]';


if(isset($_POST["submit"])) {

   $name = trim(stripslashes($_POST['contactName']));
   $email = trim(stripslashes($_POST['contactEmail']));
   $subject = trim(stripslashes($_POST['contactSubject']));
   $contact_message = trim(stripslashes($_POST['contactMessage']));

   // Check Name
    if (strlen($name) < 2) {
        $error['name'] = "Please enter your name.";
    }
    // Check Email
    if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
        $error['email'] = "Please enter a valid email address.";
    }
    // Check Message
    if (strlen($contact_message) < 15) {
        $error['message'] = "Please enter your message. It should have at least 15 characters.";
    }
   // Subject
    if ($subject == '') { $subject = "Contact Form Submission"; }


   // Set Message
   $message .= "Email from: " . $name . "<br />";
    $message .= "Email address: " . $email . "<br />";
   $message .= "Message: <br />";
   $message .= $contact_message;
   $message .= "<br /> ----- <br /> This email was sent from your site's contact form. <br />";

   // Set From: header
   $from =  $name . " <" . $email . ">";

   // Email Headers
    $headers = "From: " . $from . "\r\n";
    $headers .= "Reply-To: ". $email . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";


   if (!$error) {
        mail = new PHPMailer(true);

        $mail->isSMTP();
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'MyWebsiteEmail';
        $mail->Password = 'MyPassword';
        $mail->SMTPSecure = 'ssl'; //<---- THIS is the problem
        $mail->Port = 465;

        $mail->setFrom('MyWebsiteEmail', 'My Website');
        $mail->addAddress($siteOwnersEmail, 'Krzysztof Baran');

        $mail->isHTML(true);

        $mail->Subject = $subject;
        $mail->Body    = $message;
        $mail->AltBody = 'test text';


        try {
            $mail->send();
        echo 'OK';
    }
    catch (phpmailerException $e) {
        echo $e->errorMessage();
    } catch (Exception $e) {
        $e->getMessage();
    }

    } # end if - no validation error

    else {

        $response = (isset($error['name'])) ? $error['name'] . "<br /> \n" : null;
        $response .= (isset($error['email'])) ? $error['email'] . "<br /> \n" : null;
        $response .= (isset($error['message'])) ? $error['message'] . "<br />" : null;

        echo $response;

    } # end if - there was a validation error

}

?>

I expect the website to display box saying Your message was sent, thank you! but I am getting Something went wrong with loader. Please try again.



Solution 1:[1]

You should use form in .php file not in .html file

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Gourav