简体   繁体   中英

HTML Email Form Not Sending Message

I have downloaded a Bootstrap website template and am attempting to make the form that sends to my email address work. It gives the message that everything is submitted when all of the comments are filled in, but no actual message is sent.

Here is the chunk of the HTML from the index:

<section id="contact">
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h2>Contact Us</h2>
                <hr class="star-primary">
            </div>
        </div>
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2">
                <!-- To configure the contact form email address, go to mail/contact_me.php and update the email address in the PHP file on line 19. -->
                <!-- The form should work on most web servers, but if the form is not working you may need to configure your web server differently. -->
                <form name="sentMessage" id="contactForm" novalidate>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Name</label>
                            <input type="text" class="form-control" placeholder="Name" id="name" required data-validation-required-message="Please enter your name.">
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Email Address</label>
                            <input type="email" class="form-control" placeholder="Email Address" id="email" required data-validation-required-message="Please enter your email address.">
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Phone Number</label>
                            <input type="tel" class="form-control" placeholder="Phone Number" id="phone" required data-validation-required-message="Please enter your phone number.">
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <div class="row control-group">
                        <div class="form-group col-xs-12 floating-label-form-group controls">
                            <label>Message</label>
                            <textarea rows="5" class="form-control" placeholder="Message" id="message" required data-validation-required-message="Please enter a message."></textarea>
                            <p class="help-block text-danger"></p>
                        </div>
                    </div>
                    <br>
                    <div id="success"></div>
                    <div class="row">
                        <div class="form-group col-xs-12">
                            <button type="submit" class="btn btn-success btn-lg" action="public_html/mail/contact_me.php">Send</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</section>

Here's the code from the PHP file:

<?php
// Check for empty fields
if(empty($_POST['name'])        ||
   empty($_POST['email'])       ||
   empty($_POST['phone'])       ||
   empty($_POST['message']) ||
   !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
   {
    echo "No arguments Provided!";
    return false;
   }

$name = $_POST['name'];
$email_address = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];

// Create the email and send the message
$to = 'tri.developmentstudios@gmail.com'; // Add your email address inbetween the '' replacing            
yourname@yourdomain.com - This is where the form will send a message to.
$email_subject = "Website Contact Form:  $name";
$email_body = "You have received a new message from your website contact form.\n\n"."Here are the        
details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";
$headers = "From: noreply@tri-dev.com\n"; // This is the email address the generated message will     
be from. We recommend using something like noreply@yourdomain.com.
$headers .= "Reply-To: $email_address"; 
mail($to,$email_subject,$email_body,$headers);
return true;            
?>

Please help!

Thank you in advance

Your form has no method, so likely it's doing a $_GET instead of $_POST :

<form name="sentMessage" id="contactForm" novalidate method="post" action="public_html/mail/contact_me.php">

You have no names ( name="" ) on your inputs:

<input name="email" type="email" class="form-control" placeholder="Email Address" id="email" required data-validation-required-message="Please enter your email address.">

Also, you could break your script up a bit better:

function Validate()
    {
        // Check for empty fields
        if(empty($_POST['name'])            ||
                empty($_POST['email'])      ||
                empty($_POST['phone'])      ||
                empty($_POST['message'])    ||
                !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) {

                return false;
           }
        else
            return true;
    }

function SendEmail($to = 'tri.developmentstudios@gmail.com')
    {
        if(Validate() == true) {
                $name           =   $_POST['name'];
                $email_address  =   $_POST['email'];
                $phone          =   $_POST['phone'];
                $message        =   $_POST['message'];

                // Create the email and send the message
                $email_subject  =   "Website Contact Form:  $name";
                $email_body     =   "You have received a new message from your website contact form.\n\n"."Here are the        
                details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";
                $headers        =   "From: noreply@tri-dev.com\n";
                $headers        .= "Reply-To: $email_address";
                // Send true on successful send.
                // Send false if failed
                return (mail($to,$email_subject,$email_body,$headers))? true: false;
            }
        else
            // Invalid inputs
            return 'err';
    }

    // Apply function(s). You will get true, false, or err
    $send   =   SendEmail();

    // On return, you can echo any result
    if($send == 'err')
        echo 'Invalid Fields.';
    elseif($send == false)
        echo 'An Error Occurred.';
    else
        echo 'Email Sent Successfully.';

Are you sure it's calling your php file? I would move the action="public_html/mail/contact_me.php on your button to the opening form tag.

You could also put some "debugging" code in various points of the php file to help troubleshoot.

The mail() function may not be enabled on your hosting server for example. You could put a console.log('About to send email') just before the mail line, and console.log('Mail sent') just after the mail line. This will appear in Firebug for example and help you see if the script is working properly.

You also said it was stating it was successfully submitted, but I don't see any code that would output a success message. Can you be more clear on how you are being notified that it was "successful"?

Try doing this:

<form name="sentMessage" id="contactForm" method='post' action='public_html/mail/contact_me.php' novalidate><form>

Note: $_POST['name'] will not work if the input fields don't have name='email'

Put the destination in form tag.

<form action='contact_me.php'>
<input type='submit'>

I believe above code is correct and hope you are trying to submit your form through a javascript(jquery) ajax POST request. if yes, You can add an alert/console in the ajax success block, if you are getting it in the success block properly and not received the mail in given email ID, its related to your mail server(local or live sever).

  1. Above scenario is correct, try to use a mail ID with the same domain like, for example, if you are hosted your site as a www.exmaple.com try to use yourname@example.com
  2. If you are still looking to send a mail to Gmail or Yahoo, check with your hosting administrator, if they can figure out what is preventing the form from sending. Sample ajax request below.

    $.ajax({ url: "./mail/contact_me.php", type: "POST", data: { name: name, phone: phone, email: email, message: message }, cache: false, success: function() { alert('Success'); }, error: function() { alert('Failed'); }, complete: function() { } });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM