Subash
Subash

Reputation: 7256

Send email using php and html forms

I have a form that I want to use to collect user information. I have a php that gets the information and stores in the variable. When user clicks submit button the form gest submitted and is successfully redirected to the thank you page. Bu for some reason I am not getting the email as expected. Can someone explain where I am doing things wrong.

Below are my HTML and PHP file. I will add javascript validation later. At this moment I just want to make the form submission working.

PHP

<?php

//This page should not be accessed directly. Need to submit the form.
if(!isset($_POST['submit'])){
echo "ERROR. This page cannot be accessed directly";
}

//Variables from the form
$name               = $_POST['fullname'];
$ageGroup           = $_POST['ageGroup'];
$gender             = $_POST['gender'];
$visit              = $_POST['visit'];
$purposeOfVisit     = $_POST['purposeOfVisit'];
$otherReferrer      = $_POST['otherReferrer'];
$member             = $_POST['member'];
$socialMedia        = $_POST['socialMedia'];
$difficulties       = $_POST['difficulties'];
$easeOfUse          = $_POST['easeOfUse'];
$whatDifficulties   = $_POST['whatDifficulties'];
$specialCondition   = $_POST['specialCondition'];
$browser            = $_POST['browser'];
$preferredFormat    = $_POST['preferredFormat'];
$contentsForWebsite = $_POST['contentsForWebsite'];
$oldContents        = $_POST['oldContents'];
$expectations       = $_POST['expectations'];

$message = "Fullname:"; // will compose later

// Compose email
$email_from = "[email protected]";
$email_subject = "Infinity User Questionnaire";
$email_body = "You have received a new message from the user $name.\n".
"Here is the message:\n $message".

$to = "[email protected]";

$headers = "From: $email_from \r\n";

//Send the email!
mail($to,$email_subject,$email_body,$headers);

//done. redirect to thank-you page.
header('Location: thankyou.html');


if(IsInjected($visitor_email))
{
    echo "Bad email value!";
    exit;
}

// Function to validate against any email injection attempts
function IsInjected($str)
{
  $injections = array('(\n+)',
          '(\r+)',
          '(\t+)',
          '(%0A+)',
          '(%0D+)',
          '(%08+)',
          '(%09+)'
          );
  $inject = join('|', $injections);
  $inject = "/$inject/i";
  if(preg_match($inject,$str))
    {
    return true;
  }
  else
    {
    return false;
  }
}
?>     

you can download index.php here if you want.

Thanks a lot.

Upvotes: 1

Views: 1681

Answers (3)

Subash
Subash

Reputation: 7256

The problem was with my hosting service. I had to give them a call and they fixed it for me.

Upvotes: 0

Xenon
Xenon

Reputation: 3185

Since this is on your local machine, you need to first configure mail() in php.ini. For example, you might configure it to use your ISP's SMTP server:

[mail function]
SMTP = smtp.isp.net
smtp_port = 25
sendmail_from = [email protected]

For more information, refer to the PHP Documentation.

EDIT: I just tested your code on one of my servers, and the email sent as expected. This further leads me to believe there's something wrong with how you've configured the mail() function.

Upvotes: 3

Alexandre Leites
Alexandre Leites

Reputation: 388

I suggest for you use PHPMailer from http://phpmailer.worxware.com/ to send mails. With PHPMailer you can track the errors, send mails in HTML and TEXT, change encoding and manage the word warpers.

Also, as someone said, your script doesn't prevent it from being executed directly and i think that headers must be finished with just new line character "\n" and not return carriage "\r".

Upvotes: 0

Related Questions