PX : code

Formmail.php by joe lumbroso
Download this code


<?php
/* 
############################################################################## 
# PLEASE DO NOT REMOVE THIS HEADER!!! 

# COPYRIGHT NOTICE 

# FormMail.php v4.0 
# Copyright 2000,2001 Ai Graphics and Joe Lumbroso (c) All rights reserved. 
# Created 07/06/00   Last Modified 03/22/01 
# Joseph Lumbroso, http://www.aigraphics.com, http://www.dtheatre.com 
#                  http://www.lumbroso.com/scripts/ 
############################################################################## 
#
# Documentation can be found at: http://www.lumbroso.com/scripts/ 

# This cannot and will not be inforced but I would appreciate a link back 
# to any of these sites: 
# http://www.dtheatre.com 
# http://www.aigraphics.com 
# http://www.lumbroso.com/scripts/ 

# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
# OTHER DEALINGS IN THE SOFTWARE. 

############################################################################## 
*/ 

// formmail version (for debugging mostly) 
$version "4.0\"; 

// referers.. domains/ips that you will allow forms to 
// reside on. 
$referers = array (\'domain.com\',\'www.domain.com\',\'200.60.105.104\'); 

// our mighty error function.. 
function print_error($reason,$type = 0) { 
   global $version; 
   build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet); 
   // for missing required data 
   if ($type == \"missing\") { 
      ?> 
      The form was not submitted for the following reasons:<p> 
     <ul><? 
     echo $reason.\"\\n\"; 
     ?></ul> 
     Please use your browser\'s back button to return to the form and try again.<? 
   } else { // every other error 
      ?> 
      The form was not submitted because of the following reasons:<p> 
      <? 
   } 
   echo \"<br><br>\\n\"; 
   echo \"<small>This form is powered by <a href=\\\"http://www.lumbroso.com/scripts/\\\">Jack\'s Formmail.php $version!</a></small>\\n\\n\"; 
   exit; 


// function to check the referer for security reasons. 
// contributed by some one who\'s name got lost.. Thanks 
// goes out to him any way. 
function check_referer($referers){ 
   if (count($referers)){ 
      $found = false; 
      $temp = explode(\"/\",getenv(\"HTTP_REFERER\")); 
      $referer = $temp[2]; 
      for ($x=0; $x < count($referers); $x++){ 
         if (ereg ($referers[$x], $referer)) { 
            $found = true; 
         } 
      } 
      if (!$found){ 
         print_error(\"You are coming from an <b>unauthorized domain.</b>\"); 
         error_log(\"[FormMail.php] Illegal Referer. (\".getenv(\"HTTP_REFERER\").\")\", 0); 
      } 
         return $found; 
      } else { 
         return true; // not a good idea, if empty, it will allow it. 
   } 

if ($referers) 
   check_referer($referers); 

// parse the form and create the content string which we will send 
function parse_form($array) { 
   // build reserved keyword array 
   $reserved_keys[] = \"MAX_FILE_SIZE\"; 
   $reserved_keys[] = \"required\"; 
   $reserved_keys[] = \"redirect\"; 
   $reserved_keys[] = \"email\"; 
   $reserved_keys[] = \"require\"; 
   $reserved_keys[] = \"path_to_file\"; 
   $reserved_keys[] = \"recipient\"; 
   $reserved_keys[] = \"subject\"; 
   $reserved_keys[] = \"bgcolor\"; 
   $reserved_keys[] = \"text_color\"; 
   $reserved_keys[] = \"link_color\"; 
   $reserved_keys[] = \"vlink_color\"; 
   $reserved_keys[] = \"alink_color\"; 
   $reserved_keys[] = \"title\"; 
   $reserved_keys[] = \"missing_fields_redirect\"; 
   $reserved_keys[] = \"env_report\"; 
   if (count($array)) { 
      while (list($key, $val) = each($array)) { 
         // exclude reserved keywords 
         $reserved_violation = 0; 
         for ($ri=0; $ri<count($reserved_keys); $ri++) { 
            if ($key == $reserved_keys[$ri]) { 
               $reserved_violation = 1; 
            } 
         } 
         // prepare content 
         if ($reserved_violation != 1) { 
            if (is_array($val)) { 
               for ($z=0;$z<count($val);$z++) { 
                  $content .= \"$key: $val[$z]\\n\"; 
               } 
            } else { 
               $content .= \"$key: $val\\n\"; 
            } 
         } 
      } 
   } 
   return $content; 


// mail the content we figure out in the following steps 
function mail_it($content, $subject, $email, $recipient) { 
        mail($recipient, $subject, $content, \"From: $email\\r\\nReply-To: email\\r\\nX-Mailer: DT_formmail\"); 


// take in the body building arguments and build the body tag for page display 
function build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet) { 
   if ($style_sheet) 
      echo \"<LINK rel=STYLESHEET href=\\\"$style_sheet\\\" Type=\\\"text/css\\\">\\n\"; 
   if ($title) 
      echo \"<title>$title</title>\\n\"; 
   if (!$bgcolor) 
      $bgcolor = \"#FFFFFF\"; 
   if (!$text_color) 
      $text_color = \"#000000\"; 
   if (!$link_color) 
      $link_color = \"#0000FF\"; 
   if (!$vlink_color) 
      $vlink_color = \"#FF0000\"; 
   if (!$alink_color) 
      $alink_color = \"#000088\"; 
   if ($background) 
      $background = \"background=\\\"$background\\\"\"; 
   echo \"<body bgcolor=\\\"$bgcolor\\\" text=\\\"$text_color\\\" link=\\\"$link_color\\\" vlink=\\\"$vlink_color\\\" alink=\\\"$alink_color\\\" $background>\\n\\n\"; 


// check for a recipient email address and check the validity of it 
// Thanks to Bradley miller (bradmiller@accesszone.com) for pointing 
// out the need for multiple recipient checking and providing the code. 
$recipient_in = split(\',\',$recipient); 
for ($i=0;$i<count($recipient_in);$i++) { 
   $recipient_to_test = trim($recipient_in[$i]); 
   if (!eregi(\"^[_\\\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\\\.)+[a-z]{2,3}$\", $recipient_to_test)) { 
      print_error(\"<b>I NEED VALID RECIPIENT EMAIL ADDRESS ($recipient_to_test) TO CONTINUE</b>\"); 
   } 


// This is because I originally had it require but too many people 
// were used to Matt\'s Formmail.pl which used required instead. 
if ($required) 
   $require = $required; 
// handle the required fields 
if ($require) { 
   // seperate at the commas 
   $require = ereg_replace( \" +\", \"\", $require); 
   $required = split(\",\",$require); 
   for ($i=0;$i<count($required);$i++) { 
      $string = trim($required[$i]); 
      // check if they exsist 
      if((!(${$string})) || (!(${$string}))) { 
         // if the missing_fields_redirect option is on: redirect them 
         if ($missing_fields_redirect) { 
            header (\"Location: $missing_fields_redirect\"); 
            exit; 
         } 
         $require; 
         $missing_field_list .= \"<b>Missing: $required[$i]</b><br>\\n\"; 
      } 
   } 
   // send error to our mighty error function 
   if ($missing_field_list) 
      print_error($missing_field_list,\"missing\"); 


// check the email fields for validity 
if (($email) || ($EMAIL)) { 
   $email = trim($email); 
   if ($EMAIL) 
      $email = trim($EMAIL); 
   if (!eregi(\"^[_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3}$\", $email)) { 
      print_error(\"your <b>email address</b> is invalid\"); 
   } 
   $EMAIL = $email; 


// check zipcodes for validity 
if (($ZIP_CODE) || ($zip_code)) { 
   $zip_code = trim($zip_code); 
   if ($ZIP_CODE) 
      $zip_code = trim($ZIP_CODE); 
   if (!ereg(\"(^[0-9]{5})-([0-9]{4}$)\", trim($zip_code)) && (!ereg(\"^[a-zA-Z][0-9][a-zA-Z][[:space:]][0-9][a-zA-Z][0-9]$\", trim($zip_code))) && (!ereg(\"(^[0-9]{5})\", trim($zip_code)))) { 
      print_error(\"your <b>zip/postal code</b> is invalid\"); 
   } 


// check phone for validity 
if (($PHONE_NO) || ($phone_no)) { 
   $phone_no = trim($phone_no); 
   if ($PHONE_NO) 
      $phone_no = trim($PHONE_NO); 
   if (!ereg(\"(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)\", $phone_no)) { 
      print_error(\"your <b>phone number</b> is invalid\"); 
   } 


// check phone for validity 
if (($FAX_NO) || ($fax_no)) { 
   $fax_no = trim($fax_no); 
   if ($FAX_NO) 
      $fax_no = trim($FAX_NO); 
   if (!ereg(\"(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)\", $fax_no)) { 
      print_error(\"your <b>fax number</b> is invalid\"); 
   } 


// prepare the content 
$content = parse_form($HTTP_POST_VARS); 

// check for a file if there is a file upload it 
if ($file_name) { 
   if (!ereg(\"/$\", $path_to_file)) 
      $path_to_file = $path_to_file.\"/\"; 
   $location = $path_to_file.$file_name; 
   copy($file,$location); 
   unlink($file); 
   $content .= \"Uploaded File: \".$path_to_file.$file_name.\"\\n\"; 


// if the env_report option is on: get eviromental variables 
if ($env_report) { 
   $env_report = ereg_replace( \" +\", \"\", $env_report); 
   $env_reports = split(\",\",$env_report); 
   $content .= \"\\n------ eviromental variables ------\\n\"; 
   for ($i=0;$i<count($env_reports);$i++) { 
      $string = trim($env_reports[$i]); 
      if ($env_reports[$i] == \"REMOTE_HOST\") 
         $content .= \"REMOTE HOST: \".$REMOTE_HOST.\"\\n\"; 
      else if ($env_reports[$i] == \"REMOTE_USER\") 
         $content .= \"REMOTE USER: \". $REMOTE_USER.\"\\n\"; 
      else if ($env_reports[$i] == \"REMOTE_ADDR\") 
         $content .= \"REMOTE ADDR: \". $REMOTE_ADDR.\"\\n\"; 
      else if ($env_reports[$i] == \"HTTP_USER_AGENT\") 
         $content .= \"BROWSER: \". $HTTP_USER_AGENT.\"\\n\"; 
   } 


// if the subject option is not set: set the default 
if (!$subject) 
   $subject = \"Form submission\"; 

// send it off 
mail_it(stripslashes($content), stripslashes($subject), $email, $recipient); 

// if the redirect option is set: redirect them 
if ($redirect) { 
   header (\"Location: $redirect\"); 
   exit; 
} else { 
   print \"Thank you for your submission\\n\"; 
   echo \"<br><br>\\n\"; 
   echo \"<small>This form is powered by <a href=\\\"http://www.lumbroso.com/scripts/\\\">Jack\'s Formmail.php $version!</a></small>\\n\\n\"; 
   exit; 


// <----------    THE END    ----------> //
?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.