Where do attachments get sent in formmail?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
  • wgreene
    Sergeant Major

    • Sep 2005
    • 89

    Where do attachments get sent in formmail?

    Hello,

    I tried to upload a file attachment from a form I created. It seemed as though the mp3 was uploading (took few minutes), then I got redirected to 'my message has been received' page. The submission showed up in my email but there was no attachment. There was also no file find in the cgi-bin, temp file or main directory.....so where did it go? or was it even sent.

    I think I may have to change something in my .php file but not sure. Any help would be appreciated. Thanks!

    Wilson


    Elevate Your Music
    HipHopTraxx
    Blue Diamond Marketing
  • Andy128
    Major General

    • Dec 2005
    • 2317

    #2
    Re: Where do attachments get sent in formmail?

    Wilson-
    I would suggest you post the URL of the form and the php script used to process it. Is it a program type thing or did you make the script based on the tutorials and instruction by Navaldesign? I have a feeling this calls for Navaldesigns expert look.

    Andy
    PHP- is a blast!

    Comment

    • wgreene
      Sergeant Major

      • Sep 2005
      • 89

      #3
      Re: Where do attachments get sent in formmail?

      Andy,

      Your probably right, I think I am just missing something. The input fields are correct on the form but I think I need to edit the php script.
      form resides HERE and a copy of the script is below. Thanks for any help.

      WG

      <?
      /*
      ################################################## ############################
      # PLEASE DO NOT REMOVE THIS HEADER!!!
      #
      # COPYRIGHT NOTICE
      #
      # FormMail.php v5.0
      # Copyright 2000-2004 Ai Graphics and Joe Lumbroso (c) All rights reserved.
      # Created 07/06/2000 Last Modified 10/28/2003
      # Joseph Lumbroso, http://www.aigraphics.com, http://www.dtheatre.com
      # http://www.dtheatre.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.dtheatre.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.
      #
      ################################################## ############################
      */

      // for ultimate security, use this instead of using the form
      $recipient = "webmaster@hiphoptraxx.com"; // youremail@domain.com

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

      // referers.. domains/ips that you will allow forms to
      // reside on.
      $referers = array ('hiphoptraxx.com','www.hiphoptraxx.com','70.86.13 4.194');

      // 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');

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

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

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


      // our mighty error function..
      function print_error($reason,$type = 0) {
      build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet);
      // for missing required data
      if ($type == "missing") {
      if ($missing_field_redirect) {
      header("Location: $missing_field_redirect?error=$reason");
      exit;
      } else {
      ?>
      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.dtheatre.com/scripts/\">Jack's Formmail.php ".VERSION."</a></small>\n\n";
      exit;
      }

      // function to check the banlist
      // suggested by a whole lot of people.. Thanks
      function check_banlist($banlist, $email) {
      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("You are using from a <b>banned email address.</b>");
      }
      }

      // 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("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);

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

      // 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_fields_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])) {
      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";

      $headers = "MIME-Version: 1.0\r\n";
      $headers .= "From: ".$email."\n";
      $headers .= "To: ".$recipient."\n";
      $headers .= "Reply-To: ".$email."\n";
      if ($bcc) $headers .= "Bcc: ".$bcc."\n";
      $headers .= "X-Priority: 1\n";
      $headers .= "X-Mailer: DT Formmail".VERSION."\n";
      $headers .= "Content-Type: multipart/mixed;\n\tboundary=\"".$ob."\"\n";


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

      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\">\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,6}$", $recipient_to_test)) {
      print_error("<b>I NEED A 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,6}$", $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");
      }

      // 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."\n";
      $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."\n";
      }
      }

      // 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."\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";
      if ($env_reports[$i] == "REMOTE_USER")
      $content .= "REMOTE USER: ". $REMOTE_USER."\n";
      if ($env_reports[$i] == "REMOTE_ADDR")
      $content .= "REMOTE ADDR: ". $REMOTE_ADDR."\n";
      if ($env_reports[$i] == "HTTP_USER_AGENT")
      $content .= "BROWSER: ". $HTTP_USER_AGENT."\n";
      }
      }

      // send it off
      mail_it(stripslashes($content), ($subject)?stripslashes($subject):"Form Submission", $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: Form Submission", ($ar_from)?$ar_from:$recipient, $email);
      }

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

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


      Elevate Your Music
      HipHopTraxx
      Blue Diamond Marketing

      Comment

      • navaldesign
        General & Forum Moderator

        • Oct 2005
        • 12080

        #4
        Re: Where do attachments get sent in formmail?

        The script that you are using, uses a hidden field to pass over to the script the folder where the attachment is to be uploaded. This is the line:

        <input type="hidden" name="path_to_file" value="/www/uploaded/files">

        that you should have added in your form to provide the path for the uploaded files. Make sure that you have added it in your form, and that you have given the appropriate path fro the upload.
        Navaldesign
        Logger Lite: Low Cost, Customizable, multifeatured Login script
        Instant Download Cart: a Powerfull, Customized, in site, DB driven, e-products Cart
        DBTechnosystems.com Forms, Databases, Shopping Carts, Instant Download Carts, Loggin Systems and more....
        Advanced BlueVoda Form Processor : No coding form processor! Just install and use! Now with built in CAPTCHA!

        Comment

        • wgreene
          Sergeant Major

          • Sep 2005
          • 89

          #5
          Re: Where do attachments get sent in formmail?

          Thanks Navaldesign,
          It didn't work though, maybe I did this wrong but this is what I added to the form.

          <input type="hidden" name="path_to_file" value="/www.hiphoptraxx.com/uploads">

          WG

          Originally posted by navaldesign
          The script that you are using, uses a hidden field to pass over to the script the folder where the attachment is to be uploaded. This is the line:

          <input type="hidden" name="path_to_file" value="/www/uploaded/files">

          that you should have added in your form to provide the path for the uploaded files. Make sure that you have added it in your form, and that you have given the appropriate path fro the upload.


          Elevate Your Music
          HipHopTraxx
          Blue Diamond Marketing

          Comment

          • navaldesign
            General & Forum Moderator

            • Oct 2005
            • 12080

            #6
            Re: Where do attachments get sent in formmail?

            Are you using their remotely hosted servive ? Anyawy, your path should be: http://www.hiphoptraxx.com/uploads/ and the "upload" folder should be in your public_html folder and have permissions set to 777
            Navaldesign
            Logger Lite: Low Cost, Customizable, multifeatured Login script
            Instant Download Cart: a Powerfull, Customized, in site, DB driven, e-products Cart
            DBTechnosystems.com Forms, Databases, Shopping Carts, Instant Download Carts, Loggin Systems and more....
            Advanced BlueVoda Form Processor : No coding form processor! Just install and use! Now with built in CAPTCHA!

            Comment

            • wgreene
              Sergeant Major

              • Sep 2005
              • 89

              #7
              Re: Where do attachments get sent in formmail?

              Originally posted by navaldesign
              Are you using their remotely hosted servive ? Anyawy, your path should be: http://www.hiphoptraxx.com/uploads/ and the "upload" folder should be in your public_html folder and have permissions set to 777
              navaldesign,

              That's strange that it isn't working. I have it hosted on our servers and my "uploads" folder in the public_html with chmod set at 777. I get to my successful upload page but no file in the folder. I did just as you said and put this into the form:

              <input type="hidden" name="path_to_file" value="http://www.hiphoptraxx.com/uploads/">

              I'll check out their forum and see if I can find out what I'm doing wrong. Thanks for your help, it's probably something small.

              WG


              Elevate Your Music
              HipHopTraxx
              Blue Diamond Marketing

              Comment

              • sutliff
                Private

                • Sep 2008
                • 1

                #8
                Re: Where do attachments get sent in formmail?

                I also have a problem with Jack's Formmail posting attachments. I've gone through it but can't find the problem with the code. The message arrives but there is no attachment.

                Code:
                <form method="post" enctype="multipart/form-data" action="formmail/formmailPlayFest.php" onSubmit="return submitIt(this)">
                 
                 <input type="hidden" name="path_to_file" value="/var/www/html/formmail">
                 <input type="hidden" name="require" value="first_name, last_name, email, phone_number, email_verify">
                 <input type="hidden" name="redirect" value="[URL]http://www.heartlandtheatre.org/tenminthanks.html[/URL]">
                 <input type="hidden" name="recipient" value="[EMAIL="playfest@heartlandtheatre.org"]playfest@heartlandtheatre.org[/EMAIL]">
                 <input type="hidden" name="env_report" value="REMOTE_HOST,HTTP_USER_AGENT">
                 
                 <strong>First Name</strong>: <INPUT TYPE=text NAME="first_name" size="30">
                <strong>Last Name</strong>: <INPUT TYPE=text NAME="last_name" size="30">
                <strong>Phone Number</strong>: <INPUT TYPE=text NAME="phone_number" size="30">
                <strong>E-Mail</strong>: <INPUT TYPE=text NAME="email" size="30">
                <strong>Confirm E-Mail</strong>: <INPUT TYPE=text NAME="email_verify" size="30">
                Address: <INPUT TYPE=text NAME="address" size="50">
                City: INPUT TYPE=text NAME="city" size="15">
                State: <INPUT TYPE=text NAME="st" size="2">
                Zip Code: <INPUT TYPE=text NAME="zip" size="10">
                <strong>Title of Entry</strong>: <input type="text" name="entrytitle" size="30">
                <strong>Date of Entry</strong>: <input type="text" name="entrydate" size="30">
                <strong>Attach play</strong>: <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
                  <input type="file" name="attachment">
                <INPUT TYPE=submit VALUE="Submit Form">
                and the code behind:
                Code:
                <?
                /*
                ##############################################################################
                # PLEASE DO NOT REMOVE THIS HEADER!!!
                #
                # COPYRIGHT NOTICE
                #
                # FormMail.php v5.0
                # Copyright 2000-2004 Ai Graphics and Joe Lumbroso (c) All rights reserved.
                # Created 07/06/2000   Last Modified 10/28/2003
                # Joseph Lumbroso, [URL]http://www.aigraphics.com[/URL], [URL]http://www.dtheatre.com[/URL]
                #                  [URL]http://www.dtheatre.com/scripts/[/URL]
                ##############################################################################
                #
                # This cannot and will not be inforced but I would appreciate a link back
                # to any of these sites:
                # [URL]http://www.dtheatre.com[/URL]
                # [URL]http://www.aigraphics.com[/URL]
                # [URL]http://www.dtheatre.com/scripts/[/URL]
                #
                # 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.
                #
                ##############################################################################
                */
                 
                // for ultimate security, use this instead of using the form
                $recipient = "[EMAIL="playfest@heartlandtheatre.org"]playfest@heartlandtheatre.org[/EMAIL]"; 
                // [EMAIL="youremail@domain.com"]youremail@domain.com[/EMAIL]
                 
                // bcc emails (separate multiples with commas (,))
                // Spam might get through, so this is set to not go to aol.
                // This prevents the hosting server from being blocked by a spam report.
                $bcc = "";
                $bcc = "";
                 
                // referers.. domains/ips that you will allow forms to
                // reside on.
                $referers = array ();
                 
                // banned emails, these will be email addresses of people
                // who are blocked from using the script (requested)
                $banlist = array ();
                // field / value seperator
                define("SEPARATOR", ($separator)?$separator:": ");
                // content newline
                define("NEWLINE", ($newline)?$newline:"\n");
                 
                // formmail version (for debugging mostly)
                define("VERSION", "5.0");
                 
                // our mighty error function..
                function print_error($reason,$type = 0) {
                   build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet);
                 
                // for missing required data
                 
                if ($type == "missing") {
                 
                if ($missing_field_redirect) {
                 
                header("Location: $missing_field_redirect?error=$reason");
                         exit;
                      } else {
                      ?>
                      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=\"[URL="http://www.dtheatre.com/scripts/\&quot;>Jack's"]http://www.dtheatre.com/scripts/\">Jack's[/URL] Formmail.php ".VERSION."</a></small>\n\n";
                   exit;
                }
                // function to check the banlist
                // suggested by a whole lot of people.. Thanks
                function check_banlist($banlist, $email) {
                   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("You are using from a <b>banned email address.</b>");
                   }
                }
                // 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("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);
                if ($banlist)
                   check_banlist($banlist, $email);
                // 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_fields_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])) {
                                  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";
                 
                   $headers  = "MIME-Version: 1.0\r\n"; 
                   $headers .= "From: ".$email."\n"; 
                   $headers .= "To: ".$recipient."\n"; 
                   $headers .= "Reply-To: ".$email."\n";
                   if ($bcc) $headers .= "Bcc: ".$bcc."\n"; 
                   $headers .= "X-Priority: 1\n"; 
                   $headers .= "X-Mailer: DT Formmail".VERSION."\n"; 
                   $headers .= "Content-Type: multipart/mixed;\n\tboundary=\"".$ob."\"\n";
                 
                 
                   $message  = "This is a multi-part message in MIME format.\n";
                   $message .= "\n--".$ob."\n";
                   $message .= "Content-Type: multipart/alternative;\n\tboundary=\"".$ib."\"\n\n";
                   $message .= "\n--".$ib."\n";
                   $message .= "Content-Type: text/plain;\n\tcharset=\"iso-8859-1\"\n";
                   $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
                   $message .= $content."\n\n";
                   $message .= "\n--".$ib."--\n";
                   if ($attachment_name && !$attachment_sent) {
                      $message .= "\n--".$ob."\n";
                      $message .= "Content-Type: $attachment_type;\n\tname=\"".$attachment_name."\"\n";
                      $message .= "Content-Transfer-Encoding: base64\n";
                      $message .= "Content-Disposition: attachment;\n\tfilename=\"".$attachment_name."\"\n\n";
                      $message .= $attachment_chunk;
                      $message .= "\n\n";
                      $attachment_sent = 1;
                   }
                   $message .= "\n--".$ob."--\n";
                 
                   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\">\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 ([EMAIL="bradmiller@accesszone.com"]bradmiller@accesszone.com[/EMAIL]) 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 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,6}$", $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");
                }
                // 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."\n";
                      $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."\n";
                   }
                }
                // 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."\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";
                      if ($env_reports[$i] == "REMOTE_USER")
                         $content .= "REMOTE USER: ". $REMOTE_USER."\n";
                      if ($env_reports[$i] == "REMOTE_ADDR")
                         $content .= "REMOTE ADDR: ". $REMOTE_ADDR."\n";
                      if ($env_reports[$i] == "HTTP_USER_AGENT")
                         $content .= "BROWSER: ". $HTTP_USER_AGENT."\n";
                   }
                }
                // send it off
                mail_it(stripslashes($content), ($subject)?stripslashes($subject):"Ten Minute Play Form Submission", $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: Form Submission", ($ar_from)?$ar_from:$recipient, $email);
                }
                // if the redirect option is set: redirect them
                if ($redirect) {
                   header("Location: $redirect");
                   exit;
                } else {
                 
                $redirect = "[URL]http://www.heartlandtheatre.org/tenminthanks.html[/URL]";
                header("Location: $redirect");
                //echo "Thank you for your submission\n";
                 
                //echo "<br><br>\n Go back to <a href='http://www.heartlandtheatre.org/tenminute.html'>Play Festival page<br><br>\n";
                 
                //echo "<small>This form is powered by <a href=\"[URL="http://www.dtheatre.com/scripts/\&quot;>Jack's"]http://www.dtheatre.com/scripts/\">Jack's[/URL] Formmail.php ".VERSION."!</a></small>\n\n";
                 
                exit;
                }
                // <----------    THE END    ----------> //

                Comment

                • davedmd
                  Private

                  • Feb 2009
                  • 3

                  #9
                  Re: Where do attachments get sent in formmail?

                  How can I upgrade this to use with 2 or more picture attachements.
                  this script only supports one???????????








                  Originally posted by sutliff View Post
                  I also have a problem with Jack's Formmail posting attachments. I've gone through it but can't find the problem with the code. The message arrives but there is no attachment.

                  Code:
                  <form method="post" enctype="multipart/form-data" action="formmail/formmailPlayFest.php" onSubmit="return submitIt(this)">
                   
                   <input type="hidden" name="path_to_file" value="/var/www/html/formmail">
                   <input type="hidden" name="require" value="first_name, last_name, email, phone_number, email_verify">
                   <input type="hidden" name="redirect" value="[URL]http://www.heartlandtheatre.org/tenminthanks.html[/URL]">
                   <input type="hidden" name="recipient" value="[EMAIL="playfest@heartlandtheatre.org"]playfest@heartlandtheatre.org[/EMAIL]">
                   <input type="hidden" name="env_report" value="REMOTE_HOST,HTTP_USER_AGENT">
                   
                   <strong>First Name</strong>: <INPUT TYPE=text NAME="first_name" size="30">
                  <strong>Last Name</strong>: <INPUT TYPE=text NAME="last_name" size="30">
                  <strong>Phone Number</strong>: <INPUT TYPE=text NAME="phone_number" size="30">
                  <strong>E-Mail</strong>: <INPUT TYPE=text NAME="email" size="30">
                  <strong>Confirm E-Mail</strong>: <INPUT TYPE=text NAME="email_verify" size="30">
                  Address: <INPUT TYPE=text NAME="address" size="50">
                  City: INPUT TYPE=text NAME="city" size="15">
                  State: <INPUT TYPE=text NAME="st" size="2">
                  Zip Code: <INPUT TYPE=text NAME="zip" size="10">
                  <strong>Title of Entry</strong>: <input type="text" name="entrytitle" size="30">
                  <strong>Date of Entry</strong>: <input type="text" name="entrydate" size="30">
                  <strong>Attach play</strong>: <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
                    <input type="file" name="attachment">
                  <INPUT TYPE=submit VALUE="Submit Form">
                  and the code behind:
                  Code:
                  <?
                  /*
                  ##############################################################################
                  # PLEASE DO NOT REMOVE THIS HEADER!!!
                  #
                  # COPYRIGHT NOTICE
                  #
                  # FormMail.php v5.0
                  # Copyright 2000-2004 Ai Graphics and Joe Lumbroso (c) All rights reserved.
                  # Created 07/06/2000   Last Modified 10/28/2003
                  # Joseph Lumbroso, [URL]http://www.aigraphics.com[/URL], [URL]http://www.dtheatre.com[/URL]
                  #                  [URL]http://www.dtheatre.com/scripts/[/URL]
                  ##############################################################################
                  #
                  # This cannot and will not be inforced but I would appreciate a link back
                  # to any of these sites:
                  # [URL]http://www.dtheatre.com[/URL]
                  # [URL]http://www.aigraphics.com[/URL]
                  # [URL]http://www.dtheatre.com/scripts/[/URL]
                  #
                  # 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.
                  #
                  ##############################################################################
                  */
                   
                  // for ultimate security, use this instead of using the form
                  $recipient = "[EMAIL="playfest@heartlandtheatre.org"]playfest@heartlandtheatre.org[/EMAIL]"; 
                  // [EMAIL="youremail@domain.com"]youremail@domain.com[/EMAIL]
                   
                  // bcc emails (separate multiples with commas (,))
                  // Spam might get through, so this is set to not go to aol.
                  // This prevents the hosting server from being blocked by a spam report.
                  $bcc = "";
                  $bcc = "";
                   
                  // referers.. domains/ips that you will allow forms to
                  // reside on.
                  $referers = array ();
                   
                  // banned emails, these will be email addresses of people
                  // who are blocked from using the script (requested)
                  $banlist = array ();
                  // field / value seperator
                  define("SEPARATOR", ($separator)?$separator:": ");
                  // content newline
                  define("NEWLINE", ($newline)?$newline:"\n");
                   
                  // formmail version (for debugging mostly)
                  define("VERSION", "5.0");
                   
                  // our mighty error function..
                  function print_error($reason,$type = 0) {
                     build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet);
                   
                  // for missing required data
                   
                  if ($type == "missing") {
                   
                  if ($missing_field_redirect) {
                   
                  header("Location: $missing_field_redirect?error=$reason");
                           exit;
                        } else {
                        ?>
                        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=\"[URL="http://www.dtheatre.com/scripts/\&quot;>Jack's"]http://www.dtheatre.com/scripts/\">Jack's[/URL] Formmail.php ".VERSION."</a></small>\n\n";
                     exit;
                  }
                  // function to check the banlist
                  // suggested by a whole lot of people.. Thanks
                  function check_banlist($banlist, $email) {
                     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("You are using from a <b>banned email address.</b>");
                     }
                  }
                  // 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("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);
                  if ($banlist)
                     check_banlist($banlist, $email);
                  // 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_fields_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])) {
                                    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";
                   
                     $headers  = "MIME-Version: 1.0\r\n"; 
                     $headers .= "From: ".$email."\n"; 
                     $headers .= "To: ".$recipient."\n"; 
                     $headers .= "Reply-To: ".$email."\n";
                     if ($bcc) $headers .= "Bcc: ".$bcc."\n"; 
                     $headers .= "X-Priority: 1\n"; 
                     $headers .= "X-Mailer: DT Formmail".VERSION."\n"; 
                     $headers .= "Content-Type: multipart/mixed;\n\tboundary=\"".$ob."\"\n";
                   
                   
                     $message  = "This is a multi-part message in MIME format.\n";
                     $message .= "\n--".$ob."\n";
                     $message .= "Content-Type: multipart/alternative;\n\tboundary=\"".$ib."\"\n\n";
                     $message .= "\n--".$ib."\n";
                     $message .= "Content-Type: text/plain;\n\tcharset=\"iso-8859-1\"\n";
                     $message .= "Content-Transfer-Encoding: quoted-printable\n\n";
                     $message .= $content."\n\n";
                     $message .= "\n--".$ib."--\n";
                     if ($attachment_name && !$attachment_sent) {
                        $message .= "\n--".$ob."\n";
                        $message .= "Content-Type: $attachment_type;\n\tname=\"".$attachment_name."\"\n";
                        $message .= "Content-Transfer-Encoding: base64\n";
                        $message .= "Content-Disposition: attachment;\n\tfilename=\"".$attachment_name."\"\n\n";
                        $message .= $attachment_chunk;
                        $message .= "\n\n";
                        $attachment_sent = 1;
                     }
                     $message .= "\n--".$ob."--\n";
                   
                     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\">\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 ([EMAIL="bradmiller@accesszone.com"]bradmiller@accesszone.com[/EMAIL]) 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 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,6}$", $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");
                  }
                  // 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."\n";
                        $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."\n";
                     }
                  }
                  // 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."\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";
                        if ($env_reports[$i] == "REMOTE_USER")
                           $content .= "REMOTE USER: ". $REMOTE_USER."\n";
                        if ($env_reports[$i] == "REMOTE_ADDR")
                           $content .= "REMOTE ADDR: ". $REMOTE_ADDR."\n";
                        if ($env_reports[$i] == "HTTP_USER_AGENT")
                           $content .= "BROWSER: ". $HTTP_USER_AGENT."\n";
                     }
                  }
                  // send it off
                  mail_it(stripslashes($content), ($subject)?stripslashes($subject):"Ten Minute Play Form Submission", $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: Form Submission", ($ar_from)?$ar_from:$recipient, $email);
                  }
                  // if the redirect option is set: redirect them
                  if ($redirect) {
                     header("Location: $redirect");
                     exit;
                  } else {
                   
                  $redirect = "[URL]http://www.heartlandtheatre.org/tenminthanks.html[/URL]";
                  header("Location: $redirect");
                  //echo "Thank you for your submission\n";
                   
                  //echo "<br><br>\n Go back to <a href='http://www.heartlandtheatre.org/tenminute.html'>Play Festival page<br><br>\n";
                   
                  //echo "<small>This form is powered by <a href=\"[URL="http://www.dtheatre.com/scripts/\&quot;>Jack's"]http://www.dtheatre.com/scripts/\">Jack's[/URL] Formmail.php ".VERSION."!</a></small>\n\n";
                   
                  exit;
                  }
                  // <----------    THE END    ----------> //

                  Comment

                  Working...
                  X