Trouble contact email form for a website

Hi!

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.

thanks!

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.

thank you! I appreciate that assistance!

1 Like

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.

1 Like

Here’s my code:

<form name="contactform" method="post" action="send_form_email.php">
<table width="450px">
<tr>
 <td valign="top">
  <label for="first_name">First Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="first_name" maxlength="50" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="last_name">Last Name *</label>
 </td>
 <td valign="top">
  <input  type="text" name="last_name" maxlength="50" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="email">Email Address *</label>
 </td>
 <td valign="top">
  <input  type="text" name="email" maxlength="80" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="telephone">Telephone Number</label>
 </td>
 <td valign="top">
  <input  type="text" name="telephone" maxlength="30" size="30">
 </td>
</tr>
<tr>
 <td valign="top">
  <label for="comments">Comments *</label>
 </td>
 <td valign="top">
  <textarea  name="comments" maxlength="1000" cols="25" rows="6"></textarea>
 </td>
</tr>
<tr>
 <td colspan="2" style="text-align:center">
  <input type="submit" value="Submit">   <a href="http://www.freecontactform.com/email_form.php">Email Form</a>
 </td>
</tr>
</table>
</form>

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.

showing the code as a jpg, not sure why it didn’t come in as text

@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.

here’s the PHP code

<?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
 
}
?>

thanks!

OK, how about these questions?

And if you remove the error-suppressing @ symbol from the mail() function call, does that produce an error message?

It does act like it’s processing the email but no message ever arrives at the designated email account.

when you say “remove the error-suppressing @”, do you mean in this line of code “$email_to = “example@gmail.com”;”?
thanks

No, this line

@mail($email_to, $email_subject, $email_message, $headers);

thanks! I’ll make that edit and see what it does.

Tested it after that edit and no error message was produced, haven’t yet checked if an email arrived at the account after that attempt.

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

// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();

you would have something like

// create email headers
$headers = 'From: webenquiry@yourdomain.com'. "\r\n".    // put your valid address here
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
1 Like

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.

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.