-
-
Save AaronTraas/9533041 to your computer and use it in GitHub Desktop.
<?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."; | |
} | |
?> |
Thanks for this Aaron. I can't seem to get a reply to address working with this. Any clues?
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>";
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!
Thanks!
Thanks a lot
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.
I would also recommend using this php mail library instead:
https://github.com/PHPMailer/PHPMailer
How can a clear the form data for select options
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.