-2

I am creating an email form for a website and the html code is as follows.

        <form class="form" name="htmlform" method="post" action="contact_process.php">
        <table width="450px">
        </tr>
        <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">
         </td>
        </tr>
        </table>
        </form>
        <p>* Mandatory fields</p>

Tried the php code (in contact_process.php) below a lot but does not email the form to the specified email.

<?php
if(isset($_POST['email'])) {

    $email_to = "johmwe@outlook.coM";

    $email_subject = "Feedback Form Submissions";


    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";


// creating 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);  
?>

Thank you for contacting us. We will be in touch with you very soon.

<?php
}
die();
?>

Can someone please check the code and what am I doing wrong.

Further more, I would like to include an auto respond to the sender and a CAPTCHA image if possible for security issues.

WebDesign
  • 19
  • 1
  • 1
  • 5
  • 1
    Any error message? What does "does not work" mean? – pavel Nov 21 '14 at 07:46
  • You are bundling **three** questions into one: (1) why is PHP `mail()` not working, which **[actually](http://stackoverflow.com/questions/8803994/php-mail-not-working-for-some-reason) [has](http://stackoverflow.com/questions/20297703/mail-function-is-not-working-in-php) [been](http://stackoverflow.com/questions/23045613/my-php-mail-function-is-not-working) [asked](http://stackoverflow.com/questions/9883755/php-mail-function-not-sending-mail) [before](http://stackoverflow.com/questions/21961821/send-mail-by-php-mail-function)**, and (2) how can you incorporate auto response and (3) CAPTCHA. – Terry Nov 21 '14 at 07:50
  • @WebDesign did you check the return value of the function mail? – Riccardo Nov 21 '14 at 07:54
  • @WebDesign you didn't received email into Hotmail??? –  Nov 21 '14 at 07:56
  • 1
    Man you really need to learn code formatting. First you use condition isset(email), then inside it you check again ! isset(email) this is nonsense. Then you didn't do anything to check if the mail is sent by your script like $result = mail(...); var_dump($result); Do your homework first. Clean your code from nonsenses, and you will find your error (if any). Then go and check your hotmail spam folder and find your mails there. – bksi Nov 21 '14 at 08:08
  • @WebDesign pls check your inbox ... –  Nov 21 '14 at 08:13
  • Did you check these 5 articles @Terry suggested you? Every word is single link to different article. – bksi Nov 21 '14 at 08:17
  • @bksi Did not notice that. Thanks for telling – WebDesign Nov 21 '14 at 08:33

1 Answers1

1

It is handy if you check against your mail to see if it's send. This goes by the following

if (mail ($email_to, $email_subject, $email_message, $headers)) {
    echo "mail send";
} else {
    echo "failure to send";
}

It runs the mail function in the if else statement, resulting if you see if there is an error. If so, you have to debug to find out what the error is, since ou have a couple of variables there. It could be simply a formatting issue in your variables.

edit

Also, maybe this is me, but this doesnt make sense to me in your code.

$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";

Why would you wanna check your string for the additional tags of content-type, blind carbon copy etc ... and replace that with nothing. I mean... why would it be added in the first place, and where did you even add that to your content. I dont see it, do you?

This is bad even cause maybe i am trying to put an anchor of copied code in the comments, this will get removed automaticly, since you won't allow the href attribute. What if I am a costumer who sees an error in the code and want to point you to it and copies code over? This is just thinking ahead btw, and my POV.

edit 2

I also do hope you realize with this piece of code if(isset($_POST['email'])) { you bassically check if the email variable is set. So the whole script will execute if I just fill in an email and run it. You better can do it on the submit action. You havent set a name to it, so you might wanna do that.

<input type="submit" value="Submit"> --> <input type="submit" name="SubmitEmail" value="Submit">

then check it

if(isset($_POST['SubmitEmail'])) {

Dorvalla
  • 5,027
  • 4
  • 28
  • 45