简体   繁体   中英

Send mail from HTML form with PHP backend

I am working on my personal website at the moment, and I have done everything, except when a message comes through from a user via the contact form, and email is successfully sent to me, but the content contained within said email is blank.

My code is below:

PHP (sendmail.php)

<?php
header('Content-type: application/json');
$status = array(
    'type'=>'success',
    'message'=>'Your email has been succesfully sent.'
);

$name = @trim(stripslashes($_POST['name'])); 
$email = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 

$email_from = $email;
$email_to = 'me@joshuaquinlan.co.uk';

$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;

$success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');

echo json_encode($status);
die;

HTML (contact-us.html):

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendmail.php" role="form">
<div class="row">
    <div class="col-sm-5">
        <div class="form-group">
            <input type="text" name="name" class="form-control" required="required" placeholder="Full Name">
        </div>
        <div class="form-group">
            <input type="text" name="email" class="form-control" required="required" placeholder="Email address">
        </div>
        <div class="form-group">
            <input type="text" name="subject" class="form-control" required="required" placeholder="Subject">
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-primary btn-lg">Send Message</button>
        </div>
    </div>
    <div class="col-sm-7">
        <textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Message"></textarea>
    </div>
</div>

When the email is actually sent, however, it actually shows up like this

Please, if someone can help me, then thank you!

Your issue is you are not sending anything from your form:

$.post($(this).attr('action'),function(data){$this.prev().text(data.message) // ...

You forgot to add the data:

$.post($(this).attr('action'),$(this).serialize(), function(data){$this.prev().text(data.message) // ...

Beautified Code

// You forgot to add data here v----
$.post($(this).attr('action'), function(data) {
  $this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
}, 'json');

So correct it to:

// added data using serialize() vvvvvvvvvvvvvvvvvv
$.post($(this).attr('action'), $(this).serialize(), function(data) {
  $this.prev().text(data.message).fadeIn().delay(3000).fadeOut();
}, 'json');

Find and Replace

  1. Press Ctrl + H (Replace).
  2. Paste this in Find For : $.post($(this).attr('action'),func .
  3. Paste this in Replace With : $.post($(this).attr('action'),$(this).serialize(),func .
  4. Press Replace .
  5. See below screenshot for more details.

Screenshot

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