Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Updated AJAX email mailer PHP script
<?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 "Oops! 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 = "hello@example.com";
// 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 "Oops! 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.";
}
?>
@flannerydesigns

This comment has been minimized.

Copy link

commented Mar 26, 2014

I came here from the treehouse site and I have a problem. Everything seems fine but when I click send nothing happens. Nothing at all, no error, no email, just nothing. Any help you be great. Thank you.

@Cam

This comment has been minimized.

Copy link

commented Apr 19, 2014

Thanks for this Aaron. I can't seem to get a reply to address working with this. Any clues?

@3chroma

This comment has been minimized.

Copy link

commented Sep 11, 2014

Thanks! I'm also using this form via the Treehouse Blog.

But I noticed it will fail for anyone with an @yahoo address because of Yahoo's aggressive anti-spamming DMARC policy change (appears to send, but mail is never received).

Workaround was simple. Just change the "From: " header to your own domain, and put the user's email in a "Reply-to" field. Just change line 35 above to:

// Build the email headers.
$email_headers = "From: Example Webmaster <webmaster@example.com>\r\nReply-To: $name <$email>";
@jabbsi

This comment has been minimized.

Copy link

commented Oct 2, 2014

Just a thought, I have a situation where there are more than one contact form on the same page (The page has separate tabbed areas each with a contact form and the form sends specific data dependent on which tabbed area the user is in. The issue I notice with this scenario is that app.js sends back to the div ID #form-messages the success message.

I guess I could send back to a different div ID each time but that doesn't make sense to me. Is there a way of dynamically doing the success message without doing silly things like creating separate app.js files?

Sorry if my questions are newbie but I'm not yet experienced :-)

Thanks!

@dricardo1

This comment has been minimized.

Copy link

commented Oct 4, 2014

Thanks!

@budhapirthi

This comment has been minimized.

Copy link

commented Oct 6, 2014

Thanks a lot

@n1k1c4

This comment has been minimized.

Copy link

commented Oct 16, 2014

I have a problem. If email have a dot in name (example: steve.steve@mail.com), you didn't get an email to this address, although the script reports successful transmission.

@noxidsoft

This comment has been minimized.

Copy link

commented May 27, 2015

I would also recommend using this php mail library instead:
https://github.com/PHPMailer/PHPMailer

@alabius

This comment has been minimized.

Copy link

commented Dec 13, 2018

How can a clear the form data for select options

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.