2

I was trying to send email using a form but I got this error, I think It's SMTP configuration or something related, I'm using WAMP in my local machine

when I clic on send I got this error :


( ! ) Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Users\cysca\projects\SiteWeb\mailer.php on line 38 Call Stack #TimeMemoryFunctionLocation 10.0012251568{main}( )...\mailer.php:0 20.0014252928http://www.php.net/function.mail' target='_new'>mail ( )...\mailer.php:38 Something went wrong and we couldn't send your message.

my HTML:

<div class="col-sm-7 slideanim">
  <form id="ajax-contact" method="post" action="mailer.php">
    <div class="row">
      <div class="col-sm-6 form-group">
        <input class="form-control" id="name" name="name" placeholder="Name" type="text" required>
      </div>
      <div class="col-sm-6 form-group">
        <input class="form-control" id="email" name="email" placeholder="Email" type="email" required>
      </div>
    </div>
    <textarea class="form-control" id="message" name="message" placeholder="Your messsage" rows="5"></textarea><br>
    <div class="row">
      <div class="col-sm-12 form-group">
        <button class="btn btn-default pull-right" type="submit">Send</button>
        <div id="form-messages"></div>
      </div>
    </div>
  </form>
</div>

ajax:

$(function() {

    // Get the form.
    var form = $('#ajax-contact');

    // Get the messages div.
    var formMessages = $('#form-messages');

    // Set up an event listener for the contact form.
    $(form).submit(function(e) {
        // Stop the browser from submitting the form.
        e.preventDefault();

        // Serialize the form data.
        var formData = $(form).serialize();

        // Submit the form using AJAX.
        $.ajax({
            type: 'POST',
            url: $(form).attr('action'),
            data: formData
        })
        .done(function(response) {
            // Make sure that the formMessages div has the 'success' class.
            $(formMessages).removeClass('error');
            $(formMessages).addClass('success');

            // Set the message text.
            $(formMessages).text(response);

            // Clear the form.
            $('#name').val('');
            $('#email').val('');
            $('#message').val('');
        })
        .fail(function(data) {
            // Make sure that the formMessages div has the 'error' class.
            $(formMessages).removeClass('success');
            $(formMessages).addClass('error');

            // Set the message text.
            if (data.responseText !== '') {
                $(formMessages).text(data.responseText);
            } else {
                $(formMessages).text('Oops! An error occured and your message could not be sent.');
            }
        });

    });

});

PHP:

<?php
    // My modifications to mailer script from:
    // http://blog.teamtreehouse.com/create-ajax-contact-form
    // Added input sanitizing to prevent injection

    // Only process POST reqeusts.
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Get the form fields and remove whitespace.
        $name = strip_tags(trim($_POST["name"]));
                $name = str_replace(array("\r","\n"),array(" "," "),$name);
        $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
        $message = trim($_POST["message"]);

        // Check that data was sent to the mailer.
        if ( empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
            // Set a 400 (bad request) response code and exit.
            http_response_code(400);
            echo "There was a problem with your submission. Please complete the form and try again.";
            exit;
        }

        // Set the recipient email address.
        // FIXME: Update this to your desired email address.
        $recipient = "myEmailHere@example.ca";

        // Set the email subject.
        $subject = "New contact from $name";

        // Build the email content.
        $email_content = "Name: $name\n";
        $email_content .= "Email: $email\n\n";
        $email_content .= "Message:\n$message\n";

        // Build the email headers.
        $email_headers = "From: $name <$email>";

        // Send the email.
        if (mail($recipient, $subject, $email_content, $email_headers)) {
            // Set a 200 (okay) response code.
            http_response_code(200);
            echo "Thank You! Your message has been sent.";
        } else {
            // Set a 500 (internal server error) response code.
            http_response_code(500);
            echo "Something went wrong and we couldn't send your message.";
        }

    } else {
        // Not a POST request, set a 403 (forbidden) response code.
        http_response_code(403);
        echo "There was a problem with your submission, please try again.";
    }

?>
  • 1
    http://stackoverflow.com/questions/22396721/how-to-send-email-from-localhost-wamp-server-to-send-email-gmail-hotmail-or-so-f – bxN5 Mar 01 '17 at 22:53

1 Answers1

0

your problem is probably that you don't have a mailserver installed in your local machine, instead of a problem at your code. Check the answers here Configure WAMP server to send email

nikos.svnk
  • 1,375
  • 1
  • 13
  • 24
  • Yeah this is what I think, the code is ok, the issue is an SMTP configuration –  Mar 01 '17 at 23:00
  • yes, because php mailer tries to connect to localhost:25 but you don't have a mailserver installed locally. You can edit php.ini file and change SMTP settings to connect to some other server if you have an account somewhere that you could use, or setup a mailserver at your own pc – nikos.svnk Mar 01 '17 at 23:06
  • Perfect! This tool is magic! Should I change something after for the production server? –  Mar 01 '17 at 23:25
  • Most probably, yes. It will not work like this in the production server. You would have to know about the mailserver settings that you could use and adapt your configuration accordingly – nikos.svnk Mar 02 '17 at 10:43
  • Thank you for your help :) May the force be with you :) –  Mar 02 '17 at 16:41