-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 = "[email protected]"; $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.

8
  • 1
    Any error message? What does "does not work" mean? Commented Nov 21, 2014 at 7:46
  • You are bundling three questions into one: (1) why is PHP mail() not working, which actually has been asked before, and (2) how can you incorporate auto response and (3) CAPTCHA. Commented Nov 21, 2014 at 7:50
  • @WebDesign did you check the return value of the function mail? Commented Nov 21, 2014 at 7:54
  • @WebDesign you didn't received email into Hotmail??? Commented Nov 21, 2014 at 7: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. Commented Nov 21, 2014 at 8:08

1 Answer 1

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'])) {

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.