I’m not sure if this question shout go here or the PHP forum. I’ve added a contact form to a client’s website, using some PHP code and affiliated HTML/CSS, created by someone else and used with their permission. The page looks fine but the emails never get to the appropriate email account. I have placed the PHP file in the root directory at the same level as the individual page files and, as far as I can determine, have made all the necessary edits to the recycled code. The emails are to go to my client’s gmail account. Any thoughts/solutions (I can show code and directory if needed). This is my first attempt at using PHP, rather just a simple email call, for the contact aspect of a site.
Welcome to the forums, @smalltown61864. It sounds as if your problem is with the PHP side of things, so I’ll move your post there. Hopefully somebody can help you get it working.
Without seeing your code it’s difficult to tell, but most likely your script is using the PHP mail() function. It would be better using PHPMailer or SwiftMailer. They may take a bit more work setting up and understanding, but they are more reliable.
the PHP file, send_form_email.php, is are the same level of the directory as the webpages. this snippet, Email Form, is just something I put in as a marker/reference for myself, I’ll be deleting it once I get this solved.
@smalltown61864: when you post code on the forums, you need to format it so it will display correctly.
You can highlight your code, then use the </> button in the editor window, or you can place three backticks ``` (top left key on US/UK keyboards) on a line above your code, and three on a line below your code. I find this approach easier, but unfortunately some European and other keyboards don’t have that character.
Can you post your PHP code as well, to see if there are any typos? Does it actually execute the PHP code when you click on the submit button (not the a-href link alongside it)? Is your host server configured properly to send emails from PHP?
I notice that script uses whatever email address that the form-filler types in as the “from address” on the email. I would suggest you change that - some mail servers will only send emails ‘from’ a domain that they are configured to handle, for security reasons.
<?php
if(isset($_POST['email'])) {
// EDIT THE 2 LINES BELOW AS REQUIRED
$email_to = "example@gmail.com";
$email_subject = "Let's Talk";
function died($error) {
// your error code can go here
echo "We are very sorry, but there were error(s) found with the form you submitted. ";
echo "These errors appear below.<br /><br />";
echo $error."<br /><br />";
echo "Please go back and fix these errors.<br /><br />";
die();
}
// validation expected data exists
if(!isset($_POST['first_name']) ||
!isset($_POST['last_name']) ||
!isset($_POST['email']) ||
!isset($_POST['telephone']) ||
!isset($_POST['comments'])) {
died('We are sorry, but there appears to be a problem with the form you submitted.');
}
$first_name = $_POST['first_name']; // required
$last_name = $_POST['last_name']; // required
$email_from = $_POST['email']; // required
$telephone = $_POST['telephone']; // not required
$comments = $_POST['comments']; // required
$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
$error_message .= 'The Email Address you entered does not appear to be valid.<br />';
}
$string_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($string_exp,$first_name)) {
$error_message .= 'The First Name you entered does not appear to be valid.<br />';
}
if(!preg_match($string_exp,$last_name)) {
$error_message .= 'The Last Name you entered does not appear to be valid.<br />';
}
if(strlen($comments) < 2) {
$error_message .= 'The Comments you entered do not appear to be valid.<br />';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Telephone: ".clean_string($telephone)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
?>
<!-- include your own success html here -->
Thank you for contacting us. We will be in touch with you very soon.
<?php
}
?>
So after you’ve submitted the email, you see the “Thank you for contacting us. We will be in touch with you very soon.” message on the screen?
If you’re still not getting the error message, try changing the address that it is sent from to a valid email address on your own domain. So instead of
When sending email it is usually not sufficient to copy code. The code depends on your email server and/or ISP. I hope you have it working now but if not then perhaps you need to check the documentation provided by your ISP.