Form processor not working on IIS

Hi folks. I’ve been updating a charity website, and added a contact form.

When I was putting the site together, I tested it on an Apache server. The contact form processor works completely as expected.

However, they are hosted on a Windows server. When I try to use the contact form on there, it doesn’t work. I’m using Jacks formmail.php script, and I’ve changed the redirect and email variables to work with register_globals being off.

When I try to send the form, I get a 500 internal server error. I’ve been in contact with the web host for the past couple of weeks, but so far they’ve not managed to resolve the issue. I’m pretty sure it’s a server config problem, but I’ve no idea what.

Can anyone help me to get this working?

Here’s the form code;


<form id="enqform" action="mailer/val_form.php" method="post" >
		<input type="hidden" name="subject" value="Katie's Web Enquiry" />
		<input type="hidden" name="redirect" value="done.php" />
		<input type="hidden" name="require" value="fullname,email,enquiry" />


<fieldset>Your Details
<ol>
<li>
<label class="inline" for="fullname">Full Name:</label>
<input class="alligned" type="text" id="fullname" name="fullname" />
</li>

<li>
<label class="inline" for="email">Email Address:</label>
<input class="alligned" type="text" id="email" name="email" />
</li>

<li>
<label class="inline" for="email2">Verify Email:</label>
<input class="alligned" type="text" id="email2" name="email2" />
</li>

<li>
<label class="inline" for="tel">Telephone:</label>
<input class="alligned" type="text" id="tel" name="tel" />
</li>
</ol>
</fieldset>

<fieldset>Your Enquiry
<textarea rows="10" cols="10" id="enquiry" name="enquiry"></textarea>
</fieldset>

<ol>
<li id="send">
<button type="submit" name="submit" value="submit">Send</button>
</li>
</ol>

</form>

And here’s the form processor I’m using (I’ve removed any user emails);


*/ 
/////////////////////////////////////////// 
// Added by RJ - Converts _post to _session 
/////////////////////////////////////////// 
session_start();

foreach ($_POST as $key => $value) 
{ 
    $_SESSION[$key] = $value; 
} 

////////////////////////////////////////////////////////// 
// Added by RJ for using one form for multiple recipients 
// This section does not need to be edited. 
////////////////////////////////////////////////////////// 
$emls = explode(",", $sendto);  // sets up $emls array from , separated $sendto 

$domain = "katiesskitracks.org"; // Your domain 

foreach ($emls as $eml) 
    { 
    $reciever[] = $eml. "@" .$domain; 
    } 

$recipient = implode(",", $reciever); 

// used to put first and last name in header. 
$user = '"' .$first_name. " " .$last_name. '"'; 

///////////////////////////////////////////////////////////// 
// allows you to add a hidden pre-subject while still giving 
// submitter ability to enter a subject.  This is handy if 
// you have multiple contact forms 
///////////////////////////////////////////////////////////// 

//$subject = "hello"; 

if ($presub and $postsubject) 
{ 
    $subject = $presub. "--" .$postsubject; 
} 
else 
{ 
    $subject = $postsubject; 
} 

////////////////////////////////////////////////////////// 
// END of RJ's Addition - Other changes have been 
// made throughout the rest of the script as needed 
////////////////////////////////////////////////////////// 

////////////////////////////////////////////////////////// 
//  USER CONTROLS 
////////////////////////////////////////////////////////// 

// THIS REMOVED RECIPIENT MODIFIED ABOVE!!!! 
// for ultimate security, use this instead of using the form 
$recipient = "myemail@gmail.com"; // youremail@domain.com 

// bcc emails (separate multiples with commas (,)) 
$bcc = ""; 

// referers.. domains/ips that you will allow forms to 
// reside on. 
$referers = array ('katiesskitracks.org'); 

// banned emails, these will be email addresses of people 
// who are blocked from using the script (requested) 
//$banlist = array ('*@somedomain.com, $user@domain.com, $etc@domains.com'); 

// 
//$banip = array ('192.168.0.191');

// field / value seperator 
define("SEPARATOR", ($separator)?$separator:": "); 

// content newline 
define("NEWLINE", ($newline)?$newline:"\
"); 

// formmail version (for debugging mostly) 
define("VERSION", "5.0"); 


// our mighty error function..  Modified by RJ, mainly to determine 
// if it already has a PHP parm on url it will use & instead of ? 
function print_error($missing_field_redirect,$reason,$type = 0) 
{ 
       if ($type == "missing") 
    { 
        if ($missing_field_redirect) 
        { 
            if (strstr($missing_field_redirect,"?")) 
            { 
                header("Location: ".$missing_field_redirect."&error=".$reason); 
                exit; 
            } 
            else 
            { 
                header("Location: ".$missing_field_redirect."?error=".$reason); 
                exit; 
            } 

        } 
        else 
        { 
              ?> 
              IIIThe form was not submitted for the following reasons:<p> 
              <ul><? 
              echo $reason."\
"; 
              echo $missing_field_redirect; 
              ?></ul> 
              Please use your browser's back button to return to the form and try again.<? 
          } 

    } 
    else 
    { // every other error 
     build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet); 
      ?> 
      The form was not submitted because of the following reasons:<p> 
      <? 
    } 
    echo "<br><br>"; 
    echo "<small>This form is powered by <a href=\\"http://www.dtheatre.com/scripts/\\">Jack's Formmail.php ".VERSION."</a></small>\
\
"; 
    exit; 

   /* -----[ Original missing field redirector ]------------- 

   if ($type == "missing") 
   { 
      if ($missing_field_redirect) 
      { 
          header("Location: $missing_field_redirect&error=$reason"); 
         //header("Location: $missing_field_redirect?error=$reason"); 
         exit; 
      } 
      else 
      { 
      ?> 
      The form was not submitted for the following reasons:<p> 
      <ul><? 
      echo $reason."\
"; 
      ?></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>\
"; 
   echo "<small>This form is powered by <a href=\\"http://www.dtheatre.com/scripts/\\">Jack's Formmail.php ".VERSION."</a></small>\
\
"; 
   exit;*/ 
} 

// function to check the banlist 
// suggested by a whole lot of people.. Thanks 
function check_banlist($banlist, $email, $missing_field_redirect) { 
   if (count($banlist)) { 
      $allow = true; 
      foreach($banlist as $banned) { 
         $temp = explode("@", $banned); 
         if ($temp[0] == "*") { 
            $temp2 = explode("@", $email); 
            if (trim(strtolower($temp2[1])) == trim(strtolower($temp[1]))) 
               $allow = false; 
         } else { 
            if (trim(strtolower($email)) == trim(strtolower($banned))) 
               $allow = false; 
         } 
      } 
   } 
   if (!$allow) { 
      print_error($missing_field_redirect, "banned_email"); 
   } 
} 

// 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]; 

      if ($referer=="") {$referer = $_SERVER['HTTP_REFERER']; 
         list($remove,$stuff)=split('//',$referer,2); 
         list($home,$stuff)=split('/',$stuff,2); 
         $referer = $home; 
      } 

      for ($x=0; $x < count($referers); $x++) { 
         if (eregi ($referers[$x], $referer)) { 
            $found = true; 
         } 
      } 
      if ($referer =="") 
         $found = false; 
      if (!$found){ 
         print_error($missing_field_redirect,"unauthorized_domain"); 
         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. 
   } 
} 

// Same as above, but for IP address instead 

function check_ip($banip, $missing_field_redirect) { 

    foreach ($banip as $badip) 
    { 

        if ($badip == $_SERVER['REMOTE_ADDR']) 
        { 
            print_error($missing_field_redirect,"banned_ip"); 
            error_log("[FormMail.php] Banned IP. (".getenv("REMOTE_ADDR").")", 0); 
        } 
    } 
} 

if ($referers) 
   check_referer($referers, $missing_field_redirect); 

if ($banlist) 
   check_banlist($banlist, $email, $missing_field_redirect); 

if ($banip) 
   check_ip($banip, $missing_field_redirect); 

/////////////////////////////////////////////////////////////////////// 
// Modified by Seriph on Sitepoint for RJ - MUCHO GRASIAS 
// Modification allows for any field name arrays that have string keys. 
/////////////////////////////////////////////////////////////////////// 

// This function takes the sorts, excludes certain keys and 
// makes a pretty content string. 
function parse_form($array, $sort = "") { 
   // build reserved keyword array 
   $reserved_keys[] = "MAX_FILE_SIZE"; 
   $reserved_keys[] = "required"; 
   $reserved_keys[] = "redirect"; 
   $reserved_keys[] = "require"; 
   $reserved_keys[] = "path_to_file"; 
   $reserved_keys[] = "recipient"; 
   $reserved_keys[] = "subject"; 
   $reserved_keys[] = "sort"; 
   $reserved_keys[] = "style_sheet"; 
   $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_field_redirect"; 
   $reserved_keys[] = "env_report"; 
   $reserved_keys[] = "submit";
   $reserved_keys[] = "recaptcha_challenge_field";
   $reserved_keys[] = "recaptcha_response_field";
   $reserved_keys[] = "email2";
   if (count($array)) { 
      if (is_array($sort)) { 
         foreach ($sort as $field) { 
            $reserved_violation = 0; 
            for ($ri=0; $ri<count($reserved_keys); $ri++) 
               if ($array[$field] == $reserved_keys[$ri]) $reserved_violation = 1; 

            if ($reserved_violation != 1) { 
               if (is_array($array[$field])) { 

                 foreach ($array[$field] as $key=>$val) { 
                   $content .= $field.'['.$key.']'.SEPARATOR.$val.NEWLINE; 
                 } 

               } else 
                  $content .= $field.SEPARATOR.$array[$field].NEWLINE; 
            } 
         } 
      } 
      while (list($key, $val) = each($array)) { 
         $reserved_violation = 0; 
         for ($ri=0; $ri<count($reserved_keys); $ri++) 
            if ($key == $reserved_keys[$ri]) $reserved_violation = 1; 

         for ($ri=0; $ri<count($sort); $ri++) 
            if ($key == $sort[$ri]) $reserved_violation = 1; 

         // prepare content 
         if ($reserved_violation != 1) { 
            if (is_array($val)) { 
                 foreach ($val as $key2=>$val2) { 
                   $content .= $key.'['.$key2.']'.SEPARATOR.$val2.NEWLINE; 
                 } 
            } else 
               $content .= $key.SEPARATOR.$val.NEWLINE; 
         } 
      } 
   } 
   return $content; 
} 



/* 
// ORIGINAL parse_form function 

// This function takes the sorts, excludes certain keys and 
// makes a pretty content string. 
function parse_form($array, $sort = "") { 
   // build reserved keyword array 
   $reserved_keys[] = "MAX_FILE_SIZE"; 
   $reserved_keys[] = "required"; 
   $reserved_keys[] = "redirect"; 
   $reserved_keys[] = "require"; 
   $reserved_keys[] = "path_to_file"; 
   $reserved_keys[] = "recipient"; 
   $reserved_keys[] = "subject"; 
   $reserved_keys[] = "sort"; 
   $reserved_keys[] = "style_sheet"; 
   $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_field_redirect"; 
   $reserved_keys[] = "env_report"; 
   $reserved_keys[] = "submit"; 

   if (count($array)) { 
      if (is_array($sort)) { 
         foreach ($sort as $field) { 
            $reserved_violation = 0; 
            for ($ri=0; $ri<count($reserved_keys); $ri++) 
               if ($array[$field] == $reserved_keys[$ri]) $reserved_violation = 1; 

            if ($reserved_violation != 1) { 
               if (is_array($array[$field])) { 
                   foreach ($array[$field] as $key=>$val) { 
                    $content .= $field.'['.$key.']'.SEPARATOR.$val.NEWLINE; 
                   for ($z=0;$z<count($array[$field]);$z++) 
                     $content .= $field.SEPARATOR.$array[$field][$z].NEWLINE; 

                 } 
               } else 
                  $content .= $field.SEPARATOR.$array[$field].NEWLINE; 
            } 
         } 
      } 
      while (list($key, $val) = each($array)) { 
         $reserved_violation = 0; 
         for ($ri=0; $ri<count($reserved_keys); $ri++) 
            if ($key == $reserved_keys[$ri]) $reserved_violation = 1; 

         for ($ri=0; $ri<count($sort); $ri++) 
            if ($key == $sort[$ri]) $reserved_violation = 1; 

         // prepare content 
         if ($reserved_violation != 1) { 
            if (is_array($val)) { 
               for ($z=0;$z<count($val);$z++) 
                  $content .= $key.SEPARATOR.$val[$z].NEWLINE; 
            } else 
               $content .= $key.SEPARATOR.$val.NEWLINE; 
         } 
      } 
   } 
   return $content; 
} 
*/ 
// mail the content we figure out in the following steps 
function mail_it($content, $subject, $email, $recipient) { 
   global $attachment_chunk, $attachment_name, $attachment_type, $attachment_sent, $bcc; 

   $ob = "----=_OuterBoundary_000"; 
   $ib = "----=_InnerBoundery_001"; 

   // Removed TO: line, was causing multiple messages to be recieved, already specified by the reciepient 
   $headers = 'From: '.$email. "\\r\
";  // from hamidof on sitepoint 
   $headers .= "Reply-To: ".$email."\
"; 
   if ($bcc) $headers .= "Bcc: ".$bcc."\
"; 
   $headers .= "X-Priority: 1\
"; 
   $headers .= "X-Mailer: DT Formmail".VERSION."\
"; 
   $headers .= "MIME-Version: 1.0\\r\
";   // moved here from up higher due to not putting FROM in properly where it was located 
   $headers .= "Content-Type: multipart/mixed;\
\	boundary=\\"".$ob."\\"\
"; 


   $message  = "This is a multi-part message in MIME format.\
"; 
   $message .= "\
--".$ob."\
"; 
   $message .= "Content-Type: multipart/alternative;\
\	boundary=\\"".$ib."\\"\
\
"; 
   $message .= "\
--".$ib."\
"; 
   $message .= "Content-Type: text/plain;\
\	charset=\\"iso-8859-1\\"\
"; 
   $message .= "Content-Transfer-Encoding: quoted-printable\
\
"; 
   $message .= $content."\
\
"; 
   $message .= "\
--".$ib."--\
"; 
   if ($attachment_name && !$attachment_sent) { 
      $message .= "\
--".$ob."\
"; 
      $message .= "Content-Type: $attachment_type;\
\	name=\\"".$attachment_name."\\"\
"; 
      $message .= "Content-Transfer-Encoding: base64\
"; 
      $message .= "Content-Disposition: attachment;\
\	filename=\\"".$attachment_name."\\"\
\
"; 
      $message .= $attachment_chunk; 
      $message .= "\
\
"; 
      $attachment_sent = 1; 
   } 
   $message .= "\
--".$ob."--\
"; 

   mail($recipient, $subject, $message, $headers); 
} 

// 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\\">\
"; 
   if ($title) 
      echo "<title>$title</title>\
"; 
   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>\
\
";
} 

// 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,6}$", $recipient_to_test)) { 
      print_error("<b>I NEED VALID RECIPIENT EMAIL ADDRESS ($recipient_to_test) TO CONTINUE</b>"); 
   } 
} 

// This section is to require one phone number be listed. 
if ($requireone) 
{ 
// sets up array $require_one[] with each comma separated $requireone field. 
$require_one = explode(",", $requireone); 

    if (in_array ("phone", $require_one)) 
    { 
        if($home_phone == "" and $cell_phone == "" and $work_phone == "") 
        { 
            print_error($missing_field_redirect,"all_phones"); 
        } 
    } 

    if (in_array ("os_version", $require_one)) 
    { 
        $found = false; 
        foreach ($os_version as $version) 
        { 
            if ($version == "on") 
            { 
            $found = true; 
            } 
        } 
        if ($found != true) 
        { 
            print_error($missing_field_redirect,"os_version"); 
        } 
    } 

} 

/* 
// Requires one phone number to be listed. 
if ($requireone) 
{ 
    if($home_phone == "" and $cell_phone == "" and $work_phone == "") 
    { 
        print_error($missing_field_redirect,"all_phones"); 
    } 
} 

*/ 

// 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_field_redirect) 
        { 
            if (strstr($missing_field_redirect,"?")) 
            { 
                // needed if already has a ?something=something 
                //echo "made it to put &error="; 
                $missing_field_list = "$required[$i]"; 
                header("Location: ".$missing_field_redirect."&missing=".$missing_field_list); 
                exit; 
            } 
            else 
            { 
                // needed if it doesn't 
                //echo "made it to put ?error="; 
                $missing_field_list = "$required[$i]"; 
                header("Location: ".$missing_field_redirect."?missing=".$missing_field_list); 
                exit; 
            } 

        } 
         /*if ($missing_fields_redirect) { 
            header ("Location: $missing_fields_redirect"); 
            exit; 
         }*/ 
         $require; 
         $missing_field_list .= "<b>Missing: $required[$i]</b><br>\
"; 
      } 
   } 
   // 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,6}$", $email)) 
      print_error($missing_field_redirect,"email"); 
   $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($missing_field_redirect,"zip_code"); 
} 

// check main phone for validity 
if (($PHONE_NO) || ($phone_no)) { 
   $phone_no = trim($phone_no); 
   if ($PHONE_NO) $phone_no = trim($PHONE_NO); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$phone_no)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $phone_no)) 
      print_error($missing_field_redirect,"phone_no"); 
} 

// check Home phone for validity 
if (($home_no) || ($home_no)) { 
   $home_no = trim($home_no); 
   if ($home_no) $home_no = trim($home_no); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$home_no)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $home_no)) 
      print_error($missing_field_redirect,"home_no"); 
} 

// check Home phone for validity 
if (($home_phone) || ($home_phone)) { 
   $home_phone = trim($home_phone); 
   if ($home_phone) $home_phone = trim($home_phone); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$home_phone)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $home_phone)) 
      print_error($missing_field_redirect,"home_phone"); 
} 

// check cell phone for validity 
if (($CELL_NO) || ($cell_no)) { 
   $cell_no = trim($cell_no); 
   if ($CELL_NO) $cell_no = trim($CELL_NO); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$cell_no)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $cell_no)) 
      print_error($missing_field_redirect,"cell_no"); 
} 

// check cell phone for validity 
if (($cell_phone) || ($cell_phone)) { 
   $cell_phone = trim($cell_phone); 
   if ($cell_phone) $cell_phone = trim($cell_phone); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$cell_phone)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $cell_phone)) 
      print_error($missing_field_redirect,"cell_phone"); 
} 

// check fax phone for validity 
if (($FAX_NO) || ($fax_no)) { 
   $fax_no = trim($fax_no); 
   if ($FAX_NO) $fax_no = trim($FAX_NO); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$fax_no)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $fax_no)) 
      print_error($missing_field_redirect,"fax_no"); 
} 

// check fax phone for validity 
if (($fax_phone) || ($fax_phone)) { 
   $fax_phone = trim($fax_phone); 
   if ($fax_phone) $fax_phone = trim($fax_phone); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$fax_phone)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $fax_phone)) 
      print_error($missing_field_redirect,"fax_phone"); 
} 

// check Work phone for validity 
if (($work_no) || ($work_no)) { 
   $work_no = trim($work_no); 
   if ($work_no) $work_no = trim($work_no); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$work_no)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $work_no)) 
      print_error($missing_field_redirect,"work_no"); 
} 

// check Work phone for validity 
if (($work_phone) || ($work_phone)) { 
   $work_phone = trim($work_phone); 
   if ($work_phone) $work_phone = trim($work_phone); 
   if(!preg_match("/[0-9]{3}[-]{1}[0-9]{3}[-]{1}[0-9]{4}$/",$work_phone)) 
   //if (!ereg("(^(.*)[0-9]{3})(.*)([0-9]{3})(.*)([0-9]{4}$)", $work_phone)) 
      print_error($missing_field_redirect,"work_phone"); 
} 

// sort alphabetic or prepare an order 
if ($sort == "alphabetic") { 
   uksort($HTTP_POST_VARS, "strnatcasecmp"); 
} elseif ((ereg('^order:.*,.*', $sort)) && ($list = explode(',', ereg_replace('^order:, $', $sort)))) { 
   $sort = $list; 
} 

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

// check for an attachment if there is a file upload it 
if ($attachment_name) { 
   if ($attachment_size > 0) { 
      if (!$attachment_type) $attachment_type =  "application/unknown"; 
      $content .= "Attached File: ".$attachment_name."\
"; 
      $fp = fopen($attachment,  "r"); 
      $attachment_chunk = fread($fp, filesize($attachment)); 
      $attachment_chunk = base64_encode($attachment_chunk); 
      $attachment_chunk = chunk_split($attachment_chunk); 
   } 
} 

// check for a file if there is a file upload it 
if ($file_name) { 
   if ($file_size > 0) { 
      if (!ereg("/$", $path_to_file)) 
         $path_to_file = $path_to_file."/"; 
      $location = $path_to_file.$file_name; 
      if (file_exists($path_to_file.$file_name)) 
         $location = $path_to_file.rand(1000,3000).".".$file_name; 
      copy($file,$location); 
      unlink($file); 
      $content .= "Uploaded File: ".$location."\
"; 
   } 
} 

// second file (see manual for instructions on how to add more.) 
if ($file2_name) { 
   if ($file_size > 0) { 
      if (!ereg("/$", $path_to_file)) 
         $path_to_file = $path_to_file."/"; 
      $location = $path_to_file.$file2_name; 
      if (file_exists($path_to_file.$file2_name)) 
         $location = $path_to_file.rand(1000,3000).".".$file2_name; 
      copy($file2,$location); 
      unlink($file2); 
      $content .= "Uploaded File: ".$location."\
"; 
   } 
} 

// 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 .= "\
------ eviromental variables ------\
"; 
   for ($i=0;$i<count($env_reports);$i++) { 
      $string = trim($env_reports[$i]); 
      if ($env_reports[$i] == "REMOTE_HOST") 
         $content .= "REMOTE HOST: ".$REMOTE_HOST."\
"; 
      if ($env_reports[$i] == "REMOTE_USER") 
         $content .= "REMOTE USER: ". $REMOTE_USER."\
"; 
      if ($env_reports[$i] == "REMOTE_ADDR") 
         $content .= "REMOTE ADDR: ". $REMOTE_ADDR."\
"; 
      if ($env_reports[$i] == "HTTP_USER_AGENT") 
         $content .= "BROWSER: ". $HTTP_USER_AGENT."\
"; 
   } 
} 

// send it off 
//mail_it(stripslashes($content), ($subject)?stripslashes($subject):"Email from Web Enquiry", $email, $recipient); 
mail_it(stripslashes($content), isset($_POST['subject'])?stripslashes($_POST['subject']):"Email from Web Enquiry", $_POST['email'], $recipient);
if (file_exists($ar_file)) { 
   $fd = fopen($ar_file, "rb"); 
   $ar_message = fread($fd, filesize($ar_file)); 
   fclose($fd); 
   mail_it($ar_message, ($ar_subject)?stripslashes($ar_subject):"RE: Email from Web Enquiry", ($ar_from)?$ar_from:$recipient, $email); 
} 

// if the redirect option is set: redirect them 
//if ($redirect) { 
//   header("Location: $redirect"); 
//   exit;
if (isset($_POST['redirect'])) {
   header("Location: ". $_POST['redirect']);
   exit;
} else { 
   echo "Thank you for your submission\
"; 
   echo "<br><br>\
"; 
   echo "<small>This form is powered by <a href=\\"http://www.dtheatre.com/scripts/\\">Jack's Formmail.php ".VERSION."!</a></small>\
\
"; 
   exit; 
} 
  }
// <----------    THE END    ----------> //

The form is located here;

Katie’s Ski Tracks :: Contact Us

I’ve tried using this really basic contact form, and it works ok.

HTML Form To Email

So I’m not sure why the more advanced one doesn’t work.

You may have better luck getting an answer if a mod moves this to the PHP section.

I was going to post it there, but as it’s a server thing (I think) I thought here was best.

It seems PHP is running correctly since other pages are running OK, which means there must be an error in that particular page. I was thinking somebody in the PHP section would be able to spot it for you. I’m not a PHP guru by any means. :slight_smile:

No one able to help with this?

As far as I remember, ‘Jack’s formmail’ is a notoriously insecure script that is often used for spam attacks. Unless you’re certain that it’s been fixed in recent times I’d avoid using it.

Did you read the notes about php mail() function and windows server in the php manual? Also there are some windows-specific php.ini settings regarding mail.

Seriously, it is 2011, no need for formmail anymore.