Click to See Complete Forum and Search --> : Mail (not) function(ing)!


freddygusto
07-22-2008, 03:30 AM
Hi guys,
I am still a rookie in PHP. I am hoping that a gentle PHP mate could help me out on something...
I setup a website with a php contact page, a form to mail style contact.
It should be simple (I know!), but it is not working...!:confused:

Thanks in advance guys....


The code of the "FormToEmail.php" file follows:

<?php

$my_email = "ritamaga@gmail.com";

$continue = "/";

$errors = array();

// Remove $_COOKIE elements from $_REQUEST.

if(count($_COOKIE)){foreach(array_keys($_COOKIE) as $value){unset($_REQUEST[$value]);}}

// Validate email field.

if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{

$_REQUEST['email'] = trim($_REQUEST['email']);

if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")){$errors[] = "Email address is invalid";}else{$exploded_email = explode("@",$_REQUEST['email']);if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])){$errors[] = "Email address is invalid";}else{if(substr_count($exploded_email[1],".") == 0){$errors[] = "Email address is invalid";}else{$exploded_domain = explode(".",$exploded_email[1]);if(in_array("",$exploded_domain)){$errors[] = "Email address is invalid";}else{foreach($exploded_domain as $value){if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)){$errors[] = "Email address is invalid"; break;}}}}}}

}

// Check referrer is from same site.

if(!(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))){$errors[] = "You must enable referrer logging to use the form";}

// Check for a blank form.

function recursive_array_check_blank($element_value)
{

global $set;

if(!is_array($element_value)){if(!empty($element_value)){$set = 1;}}
else
{

foreach($element_value as $value){if($set){break;} recursive_array_check_blank($value);}

}

}

recursive_array_check_blank($_REQUEST);

if(!$set){$errors[] = "You cannot send a blank form";}

unset($set);

// Display any errors and exit if errors exist.

if(count($errors)){foreach($errors as $value){print "$value<br>";} exit;}

if(!defined("PHP_EOL")){define("PHP_EOL", strtoupper(substr(PHP_OS,0,3) == "WIN") ? "\r\n" : "\n");}

// Build message.

function build_message($request_input){if(!isset($message_output)){$message_output ="";}if(!is_array($request_input)){$message_output = $request_input;}else{foreach($request_input as $key => $value){if(!empty($value)){if(!is_numeric($key)){$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;}else{$message_output .= build_message($value).", ";}}}}return rtrim($message_output,", ");}

$message = build_message($_REQUEST);

$message = $message . PHP_EOL.PHP_EOL."-- ".PHP_EOL."Thank you for using FormToEmail from http://FormToEmail.com";

$message = stripslashes($message);

$subject = "FormToEmail Comments";

$subject = stripslashes($subject);

$from_name = "";

if(isset($_REQUEST['name']) && !empty($_REQUEST['name'])){$from_name = stripslashes($_REQUEST['name']);}

$headers = "From: {$from_name} <{$_REQUEST['email']}>";

mail($my_email,$subject,$message,$headers);

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>
<title>Form To Email PHP script from FormToEmail.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#ffffff" text="#000000">

<div>
<center>
<b>Thank you <?php if(isset($_REQUEST['name'])){print stripslashes($_REQUEST['name']);} ?></b>
<br>Your message has been sent
<p><a href="<?php print $continue; ?>">Click here to continue</a></p>
</center>
</div>

</body>
</html>

Dragonkai
07-22-2008, 07:25 AM
You should try posting in php code tags before posting code.

I didn't have a look at your code, but I came across something before.. apparently using mail functions can make your email get sent to junk...

I suggest using something like an MX exchange.. I don't quite know what I'm talking about, because I forgot how I did something once.

Anyhow, here's a tutorial:

It can help you, as it uses "advanced" email techniques.

http://www.sitepoint.com/article/advanced-email-php

Phill Pafford
07-22-2008, 08:01 AM
Here is your code in PHP tags


<?php

$my_email = "ritamaga@gmail.com";
$continue = "/";
$errors = array();

// Remove $_COOKIE elements from $_REQUEST.
if(count($_COOKIE)){
foreach(array_keys($_COOKIE) as $value){
unset($_REQUEST[$value]);
}
}

// Validate email field.
if(isset($_REQUEST['email']) && !empty($_REQUEST['email'])) {
$_REQUEST['email'] = trim($_REQUEST['email']);

if(substr_count($_REQUEST['email'],"@") != 1 || stristr($_REQUEST['email']," ")) {
$errors[] = "Email address is invalid";
} else {
$exploded_email = explode("@",$_REQUEST['email']);

if(empty($exploded_email[0]) || strlen($exploded_email[0]) > 64 || empty($exploded_email[1])) {
$errors[] = "Email address is invalid";
} else {
if(substr_count($exploded_email[1],".") == 0) {
$errors[] = "Email address is invalid";
} else {
$exploded_domain = explode(".",$exploded_email[1]);

if(in_array("",$exploded_domain)) {
$errors[] = "Email address is invalid";
} else {
foreach($exploded_domain as $value) {
if(strlen($value) > 63 || !preg_match('/^[a-z0-9-]+$/i',$value)) {
$errors[] = "Email address is invalid"; break;
}
}
}
}
}
}
}

// Check referrer is from same site.
if(!(isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && stristr($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST']))) {
$errors[] = "You must enable referrer logging to use the form";
}

// Check for a blank form.
function recursive_array_check_blank($element_value) {
global $set;

if(!is_array($element_value)) {
if(!empty($element_value)) {
$set = 1;
}
} else {
foreach($element_value as $value) {
if($set) {
break;
}

recursive_array_check_blank($value);
}
}
}

recursive_array_check_blank($_REQUEST);

if(!$set) {
$errors[] = "You cannot send a blank form";
}

unset($set);

// Display any errors and exit if errors exist.
if(count($errors)) {
foreach($errors as $value) {
print "$value<br>";
}

exit;
}

if(!defined("PHP_EOL")) {
define("PHP_EOL", strtoupper(substr(PHP_OS,0,3) == "WIN") ? "\r\n" : "\n");
}

// Build message.
function build_message($request_input) {
if(!isset($message_output)) {
$message_output ="";
}

if(!is_array($request_input)) {
$message_output = $request_input;
} else {
foreach($request_input as $key => $value) {
if(!empty($value)) {
if(!is_numeric($key)) {
$message_output .= str_replace("_"," ",ucfirst($key)).": ".build_message($value).PHP_EOL.PHP_EOL;
} else {
$message_output .= build_message($value).", ";
}
}
}
}
return rtrim($message_output,", ");
}

$message = build_message($_REQUEST);
$message = $message . PHP_EOL.PHP_EOL."-- ".PHP_EOL."Thank you for using FormToEmail from http://FormToEmail.com";
$message = stripslashes($message);

$subject = "FormToEmail Comments";
$subject = stripslashes($subject);

$from_name = "";

if(isset($_REQUEST['name']) && !empty($_REQUEST['name'])) {
$from_name = stripslashes($_REQUEST['name']);
}

$headers = "From: {$from_name} <{$_REQUEST['email']}>";

mail($my_email,$subject,$message,$headers);

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Form To Email PHP script from FormToEmail.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#ffffff" text="#000000">
<div>
<center>
<b>Thank you
<?php if(isset($_REQUEST['name'])){print stripslashes($_REQUEST['name']);} ?>
</b>
<br>
Your message has been sent
<p>
<a href="<?php print $continue; ?>">Click here to continue</a>
</p>
</center>
</div>
</body>
</html>



could you post the error your getting?

freddygusto
07-22-2008, 08:26 AM
Sorry for misposting the code like that....Thanks Phill !

Well, with regards to the error, that's the interesting part. When I click send button.... I get exactly what I'd expect:

"Thank you test name
Your message has been sent

Click here to continue"

But... I do not get the email in my inbox and neither in the junk folder. So, there is definitly something not working in this chain of events... just cannot spot it!!

Phill Pafford
07-22-2008, 08:34 AM
do you have access to the mail log?
or command line?

try running this if you dont have command line access

#1 make a test sample text file with a message inside.
text.txt
message = Hello World

#2 make a php script to test the mail function

<?php

$cmd = `cat /path/to/text.txt | mail your_email@domain.com`;
echo $cmd;

?>


wait for your email, should be very fast

Quidam
07-22-2008, 11:14 AM
Could be a problem with your smtp server.

SyCo
07-22-2008, 01:42 PM
Possibly the host too. GoDaddy has it's own way of sending mail from scripts. Check your host allows it.

Penelopa
04-07-2010, 12:41 PM
Try to get neccessary information here form creator (http://phpforms.net/tutorial/html-basics/form-creator.html) or here php arrays (http://phpforms.net/tutorial/php-basic/php-arrays.html).

SyCo
04-07-2010, 12:51 PM
This is a very old thread.