Lunarpages Web Hosting Forum

Scripting Languages Hosting Help => C++ / PERL / CGI Support => Topic started by: Guldstrand on November 19, 2003, 06:27:51 PM

Title: Formmail!!?
Post by: Guldstrand on November 19, 2003, 06:27:51 PM
Hi!

My cgi-script doesnt work anymore. I downloaded a good cgi-script from Matt's Script Archive and the script worked fine untill now.  Whats wrong!?
When i tried to send mail from the form, i came to a page with this error.

You don't have permission to access /cgi-bin/FormMail.pl on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.


--------------------------------------------------------------------------------

Apache/1.3.27 Server at www.guldstrands.net Port 80
Title: Formmail!!?
Post by: ZenGyro on November 19, 2003, 06:37:19 PM
I could be wrong, but you might ahve to set permissions to the FormMail.pl to public 777 CHMOD
Title: Formmail!!?
Post by: Danielle on November 19, 2003, 06:38:49 PM
Hi Guldstrand,

If the form you downloaded from MSA was called FormMail.pl, then it will not work b/c Lunarpages has disabled all scripts with that name due to attacks directed specifically at FormMail.pl, FormMail.cgi, anything called FormMail that is a perl/cgi script.  See this thread http://www.lunarforums.com/forum/viewtopic.php?t=8209&highlight=formmail+disabled concerning the topic.  You should simply need to rename the file something other than formmail to get it to work.  If it was not named formmail, please provide us more details to discern the difficulty occurring.

I hope this helps.
Title: HELP!!!
Post by: Guldstrand on November 20, 2003, 07:36:19 PM
I erased my cgi-script on the server. My forms dont work anymore.  :(

Kan someone help me to make a new cgi-script for forms. Im a beginner in cgi, and i have lots of forms on my site that doesnt work anymore. Where can i get a FormMail.pl or SendMail.pl, and how can i change the file so it works on my site???
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:10:10 AM
Oh, oh ... here we go again.

Okay, here's a script that I use and like for my forms.

1) Copy the below script to Notepad (word wrap off). Do not use Wordpad due to the formatting features.
2) Replace your domain name where it says yourdomain for the following sentence in the script (if you use a SSL or subdomains for your forms, you need to add those URL, as well):

@okaydomains=("http://www.yourdomain.com","http://yourdomain.com");

3) Save the script file as bnbform.txt
4) Upload to cgi-bin as ASCII and chmod to 755
5) Change the extension of the filename so that it is now bnbform.cgi
6) In your form, set the "action" to /cgi-bin/bnbform.cgi

Read the SPECIAL FORM VARIABLES area.  That area has ALL the instructions you need to create your hidden tags in your forms.

If you run into problems, post your message and I'll help you.

#******* start script ********


#!/usr/bin/perl


use Socket;
##################################################################
#  (C)1998-9 Bignosebird.com   bnbform v3.0
#  This software is FREEWARE! Do with it as you wish. It is yours  
#  to share and enjoy. Modify it, improve it, and have fun with it!
#  It is distributed strictly as a learning aid and bignosebird.com
#  disclaims all warranties- including but not limited to:          
#  fitness for a particular purpose, merchantability, loss of      
#  business, harm to your system, etc... ALWAYS BACK UP YOUR        
#  SYSTEM BEFORE INSTALLING ANY SCRIPT OR PROGRAM FROM ANY          
#  SOURCE!                                                          
#
#  Socket based e-mail for cross platform capability!
#
############## SPECIAL FORM VARIABLES ############################
#required:    comma delimited list of required entry fields
#data_order:  comma delimited list indicating what fields to actually
#             print and in what order.
#outputfile:  the name of the file to save the data in if using a file
#emailfile:   the name of the file to hold only the sender e-mail address
#ok_url:      URL to go to if successful
#not_ok_url:   URL to go to if unsuccessful
#submit_to:   email address of person to input receive data by mail
#cc_to:       email address of Cc Recipient
#submit_by:   email address of person completing form
#autorespond: if yes, then send confirmation to submitter
#automessage: text to print for autoconfirmation e-mail
#form_id:     name of form for e-mail subject
#countfile:   name of file for serial number counter
#okaydomains: prevents calling the script from other sites,
#             without restricting e-mail addresses.
#             replaces $SECURE_NAME from earlier versions.
#             use only lower case letters.
#SMTP_SERVER: the full host name of the server providing e-mail
#             gateway service
##################################################################


## MAIN ##########################################################

# uncomment the line below, and change bignosebird to your domain
# name if you wish to make is so the script can only be called
# from your site.

@okaydomains=("http://www.yourdomain.com","http://yourdomain.com");

#SMTP_SERVER: indicates the name of the host acting as the e-mail
#             gateway. "localhost" should work on most systems.

#$SMTP_SERVER="localhost";

#OR IF SMTP IS UNAVAILABLE TO YOU, USE SEND_MAIL-
# BUT NOT BOTH!

$SEND_MAIL="/usr/sbin/sendmail -t";

$lockfile="/tmp/bnbform.lck";

   &decode_vars;
   &valid_page;
   if ($fields{'countfile'} ne "")
      { &get_number; }
   &valid_data;
   &write_data;

   if ($fields{'autorespond'} eq "yes")
    { &answer_back; }

   if ($fields{'ok_url'} ne "")
    { print "Location: $fields{'ok_url'}\n\n"; exit;}
     else { &thank_you; }

##################################################################
sub write_data
{
   if ($fields{'submit_by'} ne "")
     {
       if (&valid_address == 0)  
        {
          &bad_email;
          exit;
        }
     }
   
   if ($fields{'submit_by'} ne "" && $fields{'emailfile'} ne "")
    {
      open (EMF,">>$fields{'emailfile'}");
      print EMF "$fields{'submit_by'}\n";
      close (EMF);
    }
   $the_date=localtime();
   if ($fields{'submit_to'} ne "")
    {
     #$msgtext="";
     #$msgtext .= "On $the_date,\n";
     #$msgtext .=  "The following information was submitted:\n";
     #$msgtext .=  "Host: $ENV{'REMOTE_ADDR'}\n";
    }
   if ($fields{'outputfile'} ne "")
    {
      &get_the_lock;
      open(OUT_FILE,">>$fields{'outputfile'}");
    }
   foreach $to_print (@sortlist)
    {
      if ($fields{'outputfile'} ne "")
       { print OUT_FILE "$fields{$to_print}\|"; }
      if ($fields{'submit_to'} ne "")
       { $msgtext .= "$to_print = $fields{$to_print}\n"; }
    }
   if ($fields{'outputfile'} ne "")
    {
     print OUT_FILE "$the_date\|\n";
     close(OUT_FILE);
     &drop_the_lock;
    }
   if ($fields{'submit_to'} ne "")
    {
      $mailresult=&sendmail($fields{submit_by}, $fields{submit_by}, $fields{submit_to}, $SMTP_SERVER, $fields{form_id}, $msgtext);
      if ($mailresult ne "1")
      {print "Content-type: text/html\n\n";
       print "MAIL NOT SENT. SMTP ERROR: $mailcodes{'$mailresult'}\n";
       exit
      }
    }
   if ($fields{'cc_to'} ne "")
    {
      $mailresult=&sendmail($fields{submit_by}, $fields{submit_by}, $fields{cc_to}, $SMTP_SERVER, $fields{form_id}, $msgtext);
    }
}

##################################################################
sub decode_vars
 {
  $i=0;
  read(STDIN,$temp,$ENV{'CONTENT_LENGTH'});
  @pairs=split(/&/,$temp);
  foreach $item(@pairs)
   {
    ($key,$content)=split(/=/,$item,2);
    $content=~tr/+/ /;
    $content=~s/%(..)/pack("c",hex($1))/ge;
    $content=~s/\t/ /g;
    $fields{$key}=$content;
    if ($key eq "data_order")
      {
       $content=~s/ //g;
       @sortlist=split(/,/,$content);
      }
    if ($key eq "required")
      {
       $content=~s/ //g;
       @mandatory=split(/,/,$content);
      }
   }
}

##################################################################
sub valid_data
  {
   if ($fields{'data_order'} eq "")    #make sure we have work to do!
    {
      print "Content-type: text/html\n\n";
      print <<__W1__;

      <H1>NO data_order list SPECIFIED!</H1>

__W1__
      exit;
    }

   foreach $to_check (@mandatory) #test all required fields, bail on 1st bad
    {                            
      if ($fields{$to_check} eq "")
        {
          if ($fields{'not_ok_url'} ne "")
            {
              print "Location: $fields{'not_ok_url'}\n\n";
              exit;
            }
             else
              {
                &try_again;
              }
         }
    }

  }

##################################################################
sub thank_you
  {
      print "Content-type: text/html\n\n";
      print <<__W2__;

      <H1>Thank you!</H1>
Your information has been sent and we will be in touch
      with you soon.

__W2__
      exit;
  }

##################################################################
sub try_again
  {
      print "Content-type: text/html\n\n";
      print <<__W3__;

      <H1>Missing Data!</H1>
      <B>Please press the back button and fill in
      all required fields!<P></B>

__W3__
      exit;
  }

##################################################################
sub answer_back
 {

   $subject = "Confirmation";
   $msgtext="";
  if ($fields{'automessage'} ne "")
   {
    open (AM,"< $fields{'automessage'}");
    while (<AM>)
     {
      chop $_;
      $msgtext .= "$_\n";
     }
    close(AM);
   }
    else
    {
      $msgtext =<<__W4__;

Thank you for your submission. I will be
getting in touch with you soon.

__W4__
    }
      $mailresult=&sendmail($fields{submit_to}, $fields{submit_to}, $fields{submit_by}, $SMTP_SERVER, $subject, $msgtext);
 }

##################################################################

sub get_number
 {
   $newnum=0;
   open(COUNTER,"<$fields{'countfile'}");
   while(<COUNTER>)
     {
      $newnum = $_ + 1;
     }
   close(COUNTER);
   open(COUNTER,">$fields{'countfile'}");
   print COUNTER "$newnum";
   close (COUNTER);
   $fields{'counter'}=$newnum
 }

##################################################################
sub valid_address
 {
  $testmail = $fields{'submit_by'};
  if ($testmail =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||
  $testmail !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/)
   { return 0; }
   else { return 1; }
}

##################################################################
sub bad_email
{
print <<__STOP_OF_BADMAIL__;
Content-type: text/html

<FONT SIZE="+1">
<B>
SORRY! Your request could not be processed because of an
improperly formatted e-mail address. Please use your browser's
back button to return to the form entry page.
</B>
</FONT>
__STOP_OF_BADMAIL__
}

sub get_the_lock
{
  local ($endtime);                                  
  $endtime = 60;                                      
  $endtime = time + $endtime;                        
  while (-e $lockfile && time < $endtime)
   {
    # Do Nothing                                    
   }                                                  
   open(LOCK_FILE, ">$lockfile");                    
}

sub drop_the_lock
{
  close($lockfile);
  unlink($lockfile);
}


##################################################################
sub valid_page
 {
  if (@okaydomains == 0)
     {return;}
  $DOMAIN_OK=0;                                        
  $RF=$ENV{'HTTP_REFERER'};                            
  $RF=~tr/A-Z/a-z/;                                    
  foreach $ts (@okaydomains)                            
   {                                                    
     if ($RF =~ /$ts/)                                  
      { $DOMAIN_OK=1; }
   }
   if ( $DOMAIN_OK == 0)                                
     {print "Content-type: text/html\n\n Sorry....Cant run from here!";    
      exit;
     }
 }


###################################################################
#Sendmail.pm routine below by Milivoj Ivkovic
###################################################################
sub sendmail  {

# error codes below for those who bother to check result codes <gr>

# 1 success
# -1 $smtphost unknown
# -2 socket() failed
# -3 connect() failed
# -4 service not available
# -5 unspecified communication error
# -6 local user $to unknown on host $smtp
# -7 transmission of message failed
# -8 argument $to empty
#
#  Sample call:
#
# &sendmail($from, $reply, $to, $smtp, $subject, $message );
#
#  Note that there are several commands for cleaning up possible bad inputs - if you
#  are hard coding things from a library file, so of those are unnecesssary
#

    my ($fromaddr, $replyaddr, $to, $smtp, $subject, $message) = @_;

    $to =~ s/[ \t]+/, /g; # pack spaces and add comma
    $fromaddr =~ s/.*<([^\s]*?)>/$1/; # get from email address
    $replyaddr =~ s/.*<([^\s]*?)>/$1/; # get reply email address
    $replyaddr =~ s/^([^\s]+).*/$1/; # use first address
    $message =~ s/^\./\.\./gm; # handle . as first character
    $message =~ s/\r\n/\n/g; # handle line ending
    $message =~ s/\n/\r\n/g;
    $smtp =~ s/^\s+//g; # remove spaces around $smtp
    $smtp =~ s/\s+$//g;

    if (!$to)
    {
   return(-8);
    }

 if ($SMTP_SERVER ne "")
  {
    my($proto) = (getprotobyname('tcp'))[2];
    my($port) = (getservbyname('smtp', 'tcp'))[2];

    my($smtpaddr) = ($smtp =~
           /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
   ? pack('C4',$1,$2,$3,$4)
       : (gethostbyname($smtp))[4];

    if (!defined($smtpaddr))
    {
   return(-1);
    }

    if (!socket(MAIL, AF_INET, SOCK_STREAM, $proto))
    {
   return(-2);
    }

    if (!connect(MAIL, pack('Sna4x8', AF_INET, $port, $smtpaddr)))
    {
   return(-3);
    }

    my($oldfh) = select(MAIL);
    $| = 1;
    select($oldfh);

    $_ = <MAIL>;
    if (/^[45]/)
    {
   close(MAIL);
   return(-4);
    }

    print MAIL "helo $SMTP_SERVER\r\n";
    $_ = <MAIL>;
    if (/^[45]/)
    {
   close(MAIL);
   return(-5);
    }

    print MAIL "mail from: <$fromaddr>\r\n";
    $_ = <MAIL>;
    if (/^[45]/)
    {
   close(MAIL);
   return(-5);
    }

    foreach (split(/, /, $to))
    {
   print MAIL "rcpt to: <$_>\r\n";
   $_ = <MAIL>;
   if (/^[45]/)
   {
       close(MAIL);
       return(-6);
   }
    }

    print MAIL "data\r\n";
    $_ = <MAIL>;
    if (/^[45]/)
    {
   close MAIL;
   return(-5);
    }

   }

  if ($SEND_MAIL ne "")
   {
     open (MAIL,"| $SEND_MAIL");
   }

    print MAIL "To: $to\n";
    print MAIL "From: $fromaddr\n";
    print MAIL "Reply-to: $replyaddr\n" if $replyaddr;
    print MAIL "X-Mailer: Perl Powered Socket Mailer\n";
    print MAIL "Subject: $subject\n\n";
    print MAIL "$message";
    print MAIL "\n.\n";

 if ($SMTP_SERVER ne "")
  {
    $_ = <MAIL>;
    if (/^[45]/)
    {
   close(MAIL);
   return(-7);
    }

    print MAIL "quit\r\n";
    $_ = <MAIL>;
  }

    close(MAIL);
    return(1);
}



#******** end script ********
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:16:25 AM
P.S.  Post the URL for your forms, if you need me to check if you've entered the hidden tags correctly and corresponding to your form fields.
Title: Thanks leighsww!
Post by: Guldstrand on November 21, 2003, 03:18:57 AM
I have just one other question for you.  :oops:

Where are im supposed to insert my email, so i know where im going to get the mailresults!?   :shock:
Title: Link
Post by: Guldstrand on November 21, 2003, 03:20:18 AM
Quote from: leighsww
P.S.  Post the URL for your forms, if you need me to check if you've entered the hidden tags correctly and corresponding to your form fields.


http://webb.guldstrands.net/kontakt.html
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:21:44 AM
You'll insert that in your hidden tags on the form.  Don't change anything in the script except where I told you (your domain name).  

I'm about to go to bed, so do all that you can and tomorrow I'll respond to any questions you have.

Good night.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:38:19 AM
Here one last thing before I go, so you can at least work on your form.  

These are some of the hidden tags that you will use.  You might want to use others, like "ok_url", etc. but these are the typical ones.  You basically enter your text field names exactly as you have it in your form.  The only one you MUST have (and you need to change it on your form) is the "submit_by" for the customer's e-mail addy (which replaces your "Epost" value).  I put in some of your values, but check to see if they are correct:

<INPUT TYPE="hidden" NAME="required" VALUE="Namn,submit_by">
<INPUT TYPE="hidden" NAME="form_id" VALUE="Support Form">
<INPUT TYPE="hidden" NAME="submit_to" VALUE="support@guldstrands.net">
<INPUT TYPE="hidden" NAME="data_order" VALUE="Namn,submit_by,Meddelande">
Title: ERROR!!!!?
Post by: Guldstrand on November 21, 2003, 03:40:19 AM
When i tried the form after i have fixed the small changes, this happend:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, wwwadmin@guldstrands.net and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.


--------------------------------------------------------------------------------

Apache/1.3.27 Server at webb.guldstrands.net Port 80
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:42:17 AM
That's probably because you still have stuff (hidden tags) from your Formmail.pl script.  You need to remove those.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:44:54 AM
Okay, WAIT!  Make sure you are only removing that which pertains to the FormMail.pl script.  If you have other hidden tags that pertain to other things, DON'T remove those yet.

You might have not yet done what I instructed you in my previous post, so you need to do that before the script will work.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:49:42 AM
This tag is still wrong ...

<input type="text" name="Epost" size="20">

Change "Epost" to "submit_by"

*edited - It has to correspond to the script variable.
Title: The formcode...
Post by: Guldstrand on November 21, 2003, 03:50:32 AM
Quote from: leighsww
Okay, WAIT!  Make sure you are only removing that which pertains to the FormMail.pl script.  If you have other hidden tags that pertain to other things, DON'T remove those yet.

You might have not yet done what I instructed you in my previous post, so you need to do that before the script will work.


Code: [Select]
<FORM action=/cgi-bin/bnbform.cgi method=post>
  <p align="left">&</p>
  <div align="left">
    <table border="0" width="150%">
      <tr>
        <td width="33%">
          <p align="left"><font color="#72E34F">Namn:</font></td>
        <td width="10%">
          <p align="left"></td>
        <td width="67%">
          <p align="left"><b><font color="#FFFFFF">ADRESSER</font></b></td>
      </tr>
      <tr>
        <td width="33%">
          <p align="left"><font color="#72E34F"><input type="text" name="Namn" size="20"></font></td>
        <td width="10%">
          <p align="left">&&&&&&&&&&&&&&&&&&&&&&&&&&&</td>
        <td width="67%">
          <p align="left"><font color="#72E34F"><b><a href="mailto:support@guldstrands.net">support@guldstrands.net</a></b></font></td>
      </tr>
      <tr>
        <td width="33%">
          <p align="left"><font color="#72E34F">E-post:</font></td>
        <td width="10%">
          <p align="left"></td>
        <td width="67%">
          <p align="left"><font color="#72E34F"><b><a href="mailto:info@guldstrands.net">info@guldstrands.net</a></b></font></td>
      </tr>
      <tr>
        <td width="33%">
          <p align="left"><font color="#72E34F"><input type="text" name="Epost" size="20"></font></td>
        <td width="10%">
          <p align="left"></td>
        <td width="67%">
          <p align="left"><font color="#72E34F"><b><a href="mailto:webmaster@guldstrands.net">webmaster@guldstrands.net</a></b></font></td>
      </tr>
      <tr>
        <td width="33%">
          <p align="left"><font color="#72E34F">Meddelande:</font></td>
        <td width="10%">
          <p align="left"></td>
        <td width="67%">
          <p align="left"><font color="#72E34F"><b><a href="mailto:order@guldstrands.net">order@guldstrands.net</a></b></font></td>
      </tr>
      <tr>
        <td width="33%">
          <p align="left"><textarea rows="2" name="Meddelande" cols="20"></textarea></td>
        <td width="10%">
          <p align="left"></td>
        <td width="67%">
          <div align="center">
            <p align="left"><font color="#FFFFFF">Du kan ven frska n Oss
            via icq.<br>
            </font><b><font color="#72E34F">ICQ nr: 325090516</font></b>
          </div>
          <p align="left">&</td>
      </tr>
    </table>
  </div>
  <p align="left"><input type="submit" value="Skicka" name="submit"><input type="reset" value="terstll" name="reset"></p>
  <INPUT TYPE="hidden" NAME="required" VALUE="Namn,submit_by"><BR><INPUT
TYPE="hidden" NAME="form_id" VALUE="Support Form"> <BR><INPUT
TYPE="hidden" NAME="submit_to" VALUE="support@guldstrands.net"> <BR><INPUT
TYPE="hidden" NAME="data_order" VALUE="Namn,submit_by,Meddelande">
</form>
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:53:21 AM
Did you change your "Epost" to "submit_by"?  Read my post just before your above post.
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 03:54:41 AM
Quote from: leighsww
This tag is still wrong ...

<input type="text" name="Epost" size="20">

Change "Epost" to "submit_by"

*edited - It has to correspond to the script variable.


The tag is now changed, but it still dont work.   :(
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 03:55:52 AM
Okay, I'll grab it and test it.  If it works for me, then either you didn't upload your script in ASCII, or your didn't chmod to 755.

Is the script named "bnbform.cgi" on your server?
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 03:57:54 AM
Quote from: leighsww
Okay, I'll grab it and test it.  If it works for me, then either you didn't upload your script in ASCII, or your didn't chmod to 755.

Is the script named "bnbform.cgi" on your server?


Im sure that i have chmod the script to 755, and upload it in ASCII.
Yes, the scriptname is bnbform.cgi  :?
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:01:49 AM
Okay, it worked for me.

Here go test it out (the images will be missing because I didn't copy to my server) ...

* this portion of the post has been removed as it is no longer needed *
Title: Okej!
Post by: Guldstrand on November 21, 2003, 04:04:02 AM
But why doesnt it work on MY page??

And i came to a page with this message, when i tested your link.
Sorry....Cant run from here!
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:05:08 AM
Are you using some kind of anti-virus firewall?  Turn that off for now and see if it works.
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 04:06:55 AM
Quote from: leighsww
Are you using some kind of anti-virus firewall?  Turn that off for now and see if it works.


I dont know!? Im only using Norton antivirusprogramme.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:07:16 AM
Did you get my second test to you?
Title: ???
Post by: Guldstrand on November 21, 2003, 04:08:02 AM
What test???   :shock:
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:09:54 AM
I filled out the test forms and submitted it twice.  Check your e-mail and see if you got the forms back.  You should have 2.  I used the e-mail addy "test@guldstrand.net" for the submit_by (E-post).
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:12:55 AM
Quote from: Guldstrand
Im only using Norton antivirusprogramme.


Try turning that off (disable) for now and see if the form works for you.  Use the form on my server (the sample I gave you above to click on)

P.S.  I have Norton Antivirus program and I'm able to fill out online forms with no problem.  Maybe you have your security settings too high.  Sometimes that causes problems with filling out forms.
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 04:13:08 AM
Quote from: leighsww
I filled out the test forms and submitted it twice.  Check your e-mail and see if you got the forms back.  You should have 2.  I used the e-mail addy "test@guldstrand.net" for the submit_by (E-post).


Yes, i checked my e-mal and there was 2 from test@guldstrands.net
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 04:15:22 AM
Quote from: leighsww
Quote from: Guldstrand
Im only using Norton antivirusprogramme.


Try turning that off (disable) for now and see if the form works for you.  Use the form on my server (the sample I gave you above to click on)


I dont know i dare to try disable my antivirus, because i have just now got a warning about some NetBus trojan horse :shock:
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:15:35 AM
Okay, so we know that the form works.  So, it's got to be either the chmod, or you didn't upload in ASCII.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:19:48 AM
Quote from: Guldstrand
I dont know i dare to try disable my antivirus, because i have just now got a warning about some NetBus trojan horse :shock:


Okay, that's fine. :wink:

You need to check the chmod and that you uploaded it as ASCII.

Also, post the cgi script, so I know you made the changes inside the script correctly.  Maybe, that's the problem.
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 04:26:23 AM
I have just now uploaded the script again in ASCII mode and chmod it to 755. But im still geting the error.

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, wwwadmin@guldstrands.net and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.


--------------------------------------------------------------------------------

Apache/1.3.27 Server at webb.guldstrands.net Port 80
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:26:29 AM
Please hurry up and post the script.  I really have to get some sleep.  I can't wait too much longer.  

If we can figure where the problem is in the next few minutes, you're home free and I can go to bed and you can change all your forms to make them work immediately.

Since we know the form works off my server, we're close to figuring out why it's not on working on yours.

If you said you uploaded in ASCII and chmod 755 then it probably means your script has something filled in wrong.
Title: Here is the code...
Post by: Guldstrand on November 21, 2003, 04:27:56 AM
Code: [Select]
#******* start script ********


#!/usr/bin/perl


use Socket;
##################################################################
# (C)1998-9 Bignosebird.com bnbform v3.0
# This software is FREEWARE! Do with it as you wish. It is yours
# to share and enjoy. Modify it, improve it, and have fun with it!
# It is distributed strictly as a learning aid and bignosebird.com
# disclaims all warranties- including but not limited to:
# fitness for a particular purpose, merchantability, loss of
# business, harm to your system, etc... ALWAYS BACK UP YOUR
# SYSTEM BEFORE INSTALLING ANY SCRIPT OR PROGRAM FROM ANY
# SOURCE!
#
# Socket based e-mail for cross platform capability!
#
############## SPECIAL FORM VARIABLES ############################
#required: comma delimited list of required entry fields
#data_order: comma delimited list indicating what fields to actually
# print and in what order.
#outputfile: the name of the file to save the data in if using a file
#emailfile: the name of the file to hold only the sender e-mail address
#ok_url: URL to go to if successful
#not_ok_url: URL to go to if unsuccessful
#submit_to: email address of person to input receive data by mail
#cc_to: email address of Cc Recipient
#submit_by: email address of person completing form
#autorespond: if yes, then send confirmation to submitter
#automessage: text to print for autoconfirmation e-mail
#form_id: name of form for e-mail subject
#countfile: name of file for serial number counter
#okaydomains: prevents calling the script from other sites,
# without restricting e-mail addresses.
# replaces $SECURE_NAME from earlier versions.
# use only lower case letters.
#SMTP_SERVER: the full host name of the server providing e-mail
# gateway service
##################################################################


## MAIN ##########################################################

# uncomment the line below, and change bignosebird to your domain
# name if you wish to make is so the script can only be called
# from your site.

@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net");

#SMTP_SERVER: indicates the name of the host acting as the e-mail
# gateway. "localhost" should work on most systems.

#$SMTP_SERVER="localhost";

#OR IF SMTP IS UNAVAILABLE TO YOU, USE SEND_MAIL-
# BUT NOT BOTH!

$SEND_MAIL="/usr/sbin/sendmail -t";

$lockfile="/tmp/bnbform.lck";

&decode_vars;
&valid_page;
if ($fields{'countfile'} ne "")
{ &get_number; }
&valid_data;
&write_data;

if ($fields{'autorespond'} eq "yes")
{ &answer_back; }

if ($fields{'ok_url'} ne "")
{ print "Location: $fields{'ok_url'}\n\n"; exit;}
else { &thank_you; }

##################################################################
sub write_data
{
if ($fields{'submit_by'} ne "")
{
if (&valid_address == 0)
{
&bad_email;
exit;
}
}

if ($fields{'submit_by'} ne "" && $fields{'emailfile'} ne "")
{
open (EMF,">>$fields{'emailfile'}");
print EMF "$fields{'submit_by'}\n";
close (EMF);
}
$the_date=localtime();
if ($fields{'submit_to'} ne "")
{
#$msgtext="";
#$msgtext .= "On $the_date,\n";
#$msgtext .= "The following information was submitted:\n";
#$msgtext .= "Host: $ENV{'REMOTE_ADDR'}\n";
}
if ($fields{'outputfile'} ne "")
{
&get_the_lock;
open(OUT_FILE,">>$fields{'outputfile'}");
}
foreach $to_print (@sortlist)
{
if ($fields{'outputfile'} ne "")
{ print OUT_FILE "$fields{$to_print}\|"; }
if ($fields{'submit_to'} ne "")
{ $msgtext .= "$to_print = $fields{$to_print}\n"; }
}
if ($fields{'outputfile'} ne "")
{
print OUT_FILE "$the_date\|\n";
close(OUT_FILE);
&drop_the_lock;
}
if ($fields{'submit_to'} ne "")
{
$mailresult=&sendmail($fields{submit_by}, $fields{submit_by}, $fields{submit_to}, $SMTP_SERVER, $fields{form_id}, $msgtext);
if ($mailresult ne "1")
{print "Content-type: text/html\n\n";
print "MAIL NOT SENT. SMTP ERROR: $mailcodes{'$mailresult'}\n";
exit
}
}
if ($fields{'cc_to'} ne "")
{
$mailresult=&sendmail($fields{submit_by}, $fields{submit_by}, $fields{cc_to}, $SMTP_SERVER, $fields{form_id}, $msgtext);
}
}

##################################################################
sub decode_vars
{
$i=0;
read(STDIN,$temp,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$temp);
foreach $item(@pairs)
{
($key,$content)=split(/=/,$item,2);
$content=~tr/+/ /;
$content=~s/%(..)/pack("c",hex($1))/ge;
$content=~s/\t/ /g;
$fields{$key}=$content;
if ($key eq "data_order")
{
$content=~s/ //g;
@sortlist=split(/,/,$content);
}
if ($key eq "required")
{
$content=~s/ //g;
@mandatory=split(/,/,$content);
}
}
}

##################################################################
sub valid_data
{
if ($fields{'data_order'} eq "") #make sure we have work to do!
{
print "Content-type: text/html\n\n";
print <<__W1__;

<H1>NO data_order list SPECIFIED!</H1>

__W1__
exit;
}

foreach $to_check (@mandatory) #test all required fields, bail on 1st bad
{
if ($fields{$to_check} eq "")
{
if ($fields{'not_ok_url'} ne "")
{
print "Location: $fields{'not_ok_url'}\n\n";
exit;
}
else
{
&try_again;
}
}
}

}

##################################################################
sub thank_you
{
print "Content-type: text/html\n\n";
print <<__W2__;

<H1>Thank you!</H1>
Your information has been sent and we will be in touch
with you soon.

__W2__
exit;
}

##################################################################
sub try_again
{
print "Content-type: text/html\n\n";
print <<__W3__;

<H1>Missing Data!</H1>
<B>Please press the back button and fill in
all required fields!<P></B>

__W3__
exit;
}

##################################################################
sub answer_back
{

$subject = "Confirmation";
$msgtext="";
if ($fields{'automessage'} ne "")
{
open (AM,"< $fields{'automessage'}");
while (<AM>)
{
chop $_;
$msgtext .= "$_\n";
}
close(AM);
}
else
{
$msgtext =<<__W4__;

Thank you for your submission. I will be
getting in touch with you soon.

__W4__
}
$mailresult=&sendmail($fields{submit_to}, $fields{submit_to}, $fields{submit_by}, $SMTP_SERVER, $subject, $msgtext);
}

##################################################################

sub get_number
{
$newnum=0;
open(COUNTER,"<$fields{'countfile'}");
while(<COUNTER>)
{
$newnum = $_ + 1;
}
close(COUNTER);
open(COUNTER,">$fields{'countfile'}");
print COUNTER "$newnum";
close (COUNTER);
$fields{'counter'}=$newnum
}

##################################################################
sub valid_address
{
$testmail = $fields{'submit_by'};
if ($testmail =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||
$testmail !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/)
{ return 0; }
else { return 1; }
}

##################################################################
sub bad_email
{
print <<__STOP_OF_BADMAIL__;
Content-type: text/html

<FONT SIZE="+1">
<B>
SORRY! Your request could not be processed because of an
improperly formatted e-mail address. Please use your browser's
back button to return to the form entry page.
</B>
</FONT>
__STOP_OF_BADMAIL__
}

sub get_the_lock
{
local ($endtime);
$endtime = 60;
$endtime = time + $endtime;
while (-e $lockfile && time < $endtime)
{
# Do Nothing
}
open(LOCK_FILE, ">$lockfile");
}

sub drop_the_lock
{
close($lockfile);
unlink($lockfile);
}


##################################################################
sub valid_page
{
if (@okaydomains == 0)
{return;}
$DOMAIN_OK=0;
$RF=$ENV{'HTTP_REFERER'};
$RF=~tr/A-Z/a-z/;
foreach $ts (@okaydomains)
{
if ($RF =~ /$ts/)
{ $DOMAIN_OK=1; }
}
if ( $DOMAIN_OK == 0)
{print "Content-type: text/html\n\n Sorry....Cant run from here!";
exit;
}
}


###################################################################
#Sendmail.pm routine below by Milivoj Ivkovic
###################################################################
sub sendmail {

# error codes below for those who bother to check result codes <gr>

# 1 success
# -1 $smtphost unknown
# -2 socket() failed
# -3 connect() failed
# -4 service not available
# -5 unspecified communication error
# -6 local user $to unknown on host $smtp
# -7 transmission of message failed
# -8 argument $to empty
#
# Sample call:
#
# &sendmail($from, $reply, $to, $smtp, $subject, $message );
#
# Note that there are several commands for cleaning up possible bad inputs - if you
# are hard coding things from a library file, so of those are unnecesssary
#

my ($fromaddr, $replyaddr, $to, $smtp, $subject, $message) = @_;

$to =~ s/[ \t]+/, /g; # pack spaces and add comma
$fromaddr =~ s/.*<([^\s]*?)>/$1/; # get from email address
$replyaddr =~ s/.*<([^\s]*?)>/$1/; # get reply email address
$replyaddr =~ s/^([^\s]+).*/$1/; # use first address
$message =~ s/^\./\.\./gm; # handle . as first character
$message =~ s/\r\n/\n/g; # handle line ending
$message =~ s/\n/\r\n/g;
$smtp =~ s/^\s+//g; # remove spaces around $smtp
$smtp =~ s/\s+$//g;

if (!$to)
{
return(-8);
}

if ($SMTP_SERVER ne "")
{
my($proto) = (getprotobyname('tcp'))[2];
my($port) = (getservbyname('smtp', 'tcp'))[2];

my($smtpaddr) = ($smtp =~
/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
? pack('C4',$1,$2,$3,$4)
: (gethostbyname($smtp))[4];

if (!defined($smtpaddr))
{
return(-1);
}

if (!socket(MAIL, AF_INET, SOCK_STREAM, $proto))
{
return(-2);
}

if (!connect(MAIL, pack('Sna4x8', AF_INET, $port, $smtpaddr)))
{
return(-3);
}

my($oldfh) = select(MAIL);
$| = 1;
select($oldfh);

$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-4);
}

print MAIL "helo $SMTP_SERVER\r\n";
$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-5);
}

print MAIL "mail from: <$fromaddr>\r\n";
$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-5);
}

foreach (split(/, /, $to))
{
print MAIL "rcpt to: <$_>\r\n";
$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-6);
}
}

print MAIL "data\r\n";
$_ = <MAIL>;
if (/^[45]/)
{
close MAIL;
return(-5);
}

}

if ($SEND_MAIL ne "")
{
open (MAIL,"| $SEND_MAIL");
}

print MAIL "To: $to\n";
print MAIL "From: $fromaddr\n";
print MAIL "Reply-to: $replyaddr\n" if $replyaddr;
print MAIL "X-Mailer: Perl Powered Socket Mailer\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$message";
print MAIL "\n.\n";

if ($SMTP_SERVER ne "")
{
$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-7);
}

print MAIL "quit\r\n";
$_ = <MAIL>;
}

close(MAIL);
return(1);
}



#******** end script ********
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:30:54 AM
Okay, I think I know what's the problem.

Change this ...

@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net");

to this ...

@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net","http://guldstrands.net","http://www.webb.guldstrands.net");

You need to have BOTH with www and without for all your domains.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:33:12 AM
I had to make a revision cause I forgot the " on one of the URLs.  Make sure all the quotation marks are preceding and ending each URL (if you "copied" from the post) and not manually made the revision.
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 04:36:08 AM
Quote from: leighsww
I had to make a revision cause I forgot the " on one of the URLs.  Make sure all the quotation marks are preceding and ending each URL (if you "copied" from the post) and not manually made the revision.


I have done the changes, @okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net","http://www.webb.guldstrands.net","http://guldstrands.net");
 
but im still geting the error.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:36:08 AM
Okay, I see the bigger problem.  Remove the #****** start script******* and the #******** end script ******* lines.  Those were to tell you to copy everything in-between.

That first line is what's the problem.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 04:37:58 AM
This line ...

#!/usr/bin/perl

MUST be the first line of the script.

I think this will do it!
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 04:40:52 AM
This is the changed code:

#!/usr/bin/perl


use Socket;
##################################################################
# (C)1998-9 Bignosebird.com bnbform v3.0
# This software is FREEWARE! Do with it as you wish. It is yours
# to share and enjoy. Modify it, improve it, and have fun with it!
# It is distributed strictly as a learning aid and bignosebird.com
# disclaims all warranties- including but not limited to:
# fitness for a particular purpose, merchantability, loss of
# business, harm to your system, etc... ALWAYS BACK UP YOUR
# SYSTEM BEFORE INSTALLING ANY SCRIPT OR PROGRAM FROM ANY
# SOURCE!
#
# Socket based e-mail for cross platform capability!
#
############## SPECIAL FORM VARIABLES ############################
#required: comma delimited list of required entry fields
#data_order: comma delimited list indicating what fields to actually
# print and in what order.
#outputfile: the name of the file to save the data in if using a file
#emailfile: the name of the file to hold only the sender e-mail address
#ok_url: URL to go to if successful
#not_ok_url: URL to go to if unsuccessful
#submit_to: email address of person to input receive data by mail
#cc_to: email address of Cc Recipient
#submit_by: email address of person completing form
#autorespond: if yes, then send confirmation to submitter
#automessage: text to print for autoconfirmation e-mail
#form_id: name of form for e-mail subject
#countfile: name of file for serial number counter
#okaydomains: prevents calling the script from other sites,
# without restricting e-mail addresses.
# replaces $SECURE_NAME from earlier versions.
# use only lower case letters.
#SMTP_SERVER: the full host name of the server providing e-mail
# gateway service
##################################################################


## MAIN ##########################################################

# uncomment the line below, and change bignosebird to your domain
# name if you wish to make is so the script can only be called
# from your site.

@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net","http://www.webb.guldstrands.net","http://guldstrands.net");

#SMTP_SERVER: indicates the name of the host acting as the e-mail
# gateway. "localhost" should work on most systems.

#$SMTP_SERVER="localhost";

#OR IF SMTP IS UNAVAILABLE TO YOU, USE SEND_MAIL-
# BUT NOT BOTH!

$SEND_MAIL="/usr/sbin/sendmail -t";

$lockfile="/tmp/bnbform.lck";

&decode_vars;
&valid_page;
if ($fields{'countfile'} ne "")
{ &get_number; }
&valid_data;
&write_data;

if ($fields{'autorespond'} eq "yes")
{ &answer_back; }

if ($fields{'ok_url'} ne "")
{ print "Location: $fields{'ok_url'}\n\n"; exit;}
else { &thank_you; }

##################################################################
sub write_data
{
if ($fields{'submit_by'} ne "")
{
if (&valid_address == 0)
{
&bad_email;
exit;
}
}

if ($fields{'submit_by'} ne "" && $fields{'emailfile'} ne "")
{
open (EMF,">>$fields{'emailfile'}");
print EMF "$fields{'submit_by'}\n";
close (EMF);
}
$the_date=localtime();
if ($fields{'submit_to'} ne "")
{
#$msgtext="";
#$msgtext .= "On $the_date,\n";
#$msgtext .= "The following information was submitted:\n";
#$msgtext .= "Host: $ENV{'REMOTE_ADDR'}\n";
}
if ($fields{'outputfile'} ne "")
{
&get_the_lock;
open(OUT_FILE,">>$fields{'outputfile'}");
}
foreach $to_print (@sortlist)
{
if ($fields{'outputfile'} ne "")
{ print OUT_FILE "$fields{$to_print}\|"; }
if ($fields{'submit_to'} ne "")
{ $msgtext .= "$to_print = $fields{$to_print}\n"; }
}
if ($fields{'outputfile'} ne "")
{
print OUT_FILE "$the_date\|\n";
close(OUT_FILE);
&drop_the_lock;
}
if ($fields{'submit_to'} ne "")
{
$mailresult=&sendmail($fields{submit_by}, $fields{submit_by}, $fields{submit_to}, $SMTP_SERVER, $fields{form_id}, $msgtext);
if ($mailresult ne "1")
{print "Content-type: text/html\n\n";
print "MAIL NOT SENT. SMTP ERROR: $mailcodes{'$mailresult'}\n";
exit
}
}
if ($fields{'cc_to'} ne "")
{
$mailresult=&sendmail($fields{submit_by}, $fields{submit_by}, $fields{cc_to}, $SMTP_SERVER, $fields{form_id}, $msgtext);
}
}

##################################################################
sub decode_vars
{
$i=0;
read(STDIN,$temp,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$temp);
foreach $item(@pairs)
{
($key,$content)=split(/=/,$item,2);
$content=~tr/+/ /;
$content=~s/%(..)/pack("c",hex($1))/ge;
$content=~s/\t/ /g;
$fields{$key}=$content;
if ($key eq "data_order")
{
$content=~s/ //g;
@sortlist=split(/,/,$content);
}
if ($key eq "required")
{
$content=~s/ //g;
@mandatory=split(/,/,$content);
}
}
}

##################################################################
sub valid_data
{
if ($fields{'data_order'} eq "") #make sure we have work to do!
{
print "Content-type: text/html\n\n";
print <<__W1__;

<H1>NO data_order list SPECIFIED!</H1>

__W1__
exit;
}

foreach $to_check (@mandatory) #test all required fields, bail on 1st bad
{
if ($fields{$to_check} eq "")
{
if ($fields{'not_ok_url'} ne "")
{
print "Location: $fields{'not_ok_url'}\n\n";
exit;
}
else
{
&try_again;
}
}
}

}

##################################################################
sub thank_you
{
print "Content-type: text/html\n\n";
print <<__W2__;

<H1>Thank you!</H1>
Your information has been sent and we will be in touch
with you soon.

__W2__
exit;
}

##################################################################
sub try_again
{
print "Content-type: text/html\n\n";
print <<__W3__;

<H1>Missing Data!</H1>
<B>Please press the back button and fill in
all required fields!<P></B>

__W3__
exit;
}

##################################################################
sub answer_back
{

$subject = "Confirmation";
$msgtext="";
if ($fields{'automessage'} ne "")
{
open (AM,"< $fields{'automessage'}");
while (<AM>)
{
chop $_;
$msgtext .= "$_\n";
}
close(AM);
}
else
{
$msgtext =<<__W4__;

Thank you for your submission. I will be
getting in touch with you soon.

__W4__
}
$mailresult=&sendmail($fields{submit_to}, $fields{submit_to}, $fields{submit_by}, $SMTP_SERVER, $subject, $msgtext);
}

##################################################################

sub get_number
{
$newnum=0;
open(COUNTER,"<$fields{'countfile'}");
while(<COUNTER>)
{
$newnum = $_ + 1;
}
close(COUNTER);
open(COUNTER,">$fields{'countfile'}");
print COUNTER "$newnum";
close (COUNTER);
$fields{'counter'}=$newnum
}

##################################################################
sub valid_address
{
$testmail = $fields{'submit_by'};
if ($testmail =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||
$testmail !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/)
{ return 0; }
else { return 1; }
}

##################################################################
sub bad_email
{
print <<__STOP_OF_BADMAIL__;
Content-type: text/html

<FONT SIZE="+1">
<B>
SORRY! Your request could not be processed because of an
improperly formatted e-mail address. Please use your browser's
back button to return to the form entry page.
</B>
</FONT>
__STOP_OF_BADMAIL__
}

sub get_the_lock
{
local ($endtime);
$endtime = 60;
$endtime = time + $endtime;
while (-e $lockfile && time < $endtime)
{
# Do Nothing
}
open(LOCK_FILE, ">$lockfile");
}

sub drop_the_lock
{
close($lockfile);
unlink($lockfile);
}


##################################################################
sub valid_page
{
if (@okaydomains == 0)
{return;}
$DOMAIN_OK=0;
$RF=$ENV{'HTTP_REFERER'};
$RF=~tr/A-Z/a-z/;
foreach $ts (@okaydomains)
{
if ($RF =~ /$ts/)
{ $DOMAIN_OK=1; }
}
if ( $DOMAIN_OK == 0)
{print "Content-type: text/html\n\n Sorry....Cant run from here!";
exit;
}
}


###################################################################
#Sendmail.pm routine below by Milivoj Ivkovic
###################################################################
sub sendmail {

# error codes below for those who bother to check result codes <gr>

# 1 success
# -1 $smtphost unknown
# -2 socket() failed
# -3 connect() failed
# -4 service not available
# -5 unspecified communication error
# -6 local user $to unknown on host $smtp
# -7 transmission of message failed
# -8 argument $to empty
#
# Sample call:
#
# &sendmail($from, $reply, $to, $smtp, $subject, $message );
#
# Note that there are several commands for cleaning up possible bad inputs - if you
# are hard coding things from a library file, so of those are unnecesssary
#

my ($fromaddr, $replyaddr, $to, $smtp, $subject, $message) = @_;

$to =~ s/[ \t]+/, /g; # pack spaces and add comma
$fromaddr =~ s/.*<([^\s]*?)>/$1/; # get from email address
$replyaddr =~ s/.*<([^\s]*?)>/$1/; # get reply email address
$replyaddr =~ s/^([^\s]+).*/$1/; # use first address
$message =~ s/^\./\.\./gm; # handle . as first character
$message =~ s/\r\n/\n/g; # handle line ending
$message =~ s/\n/\r\n/g;
$smtp =~ s/^\s+//g; # remove spaces around $smtp
$smtp =~ s/\s+$//g;

if (!$to)
{
return(-8);
}

if ($SMTP_SERVER ne "")
{
my($proto) = (getprotobyname('tcp'))[2];
my($port) = (getservbyname('smtp', 'tcp'))[2];

my($smtpaddr) = ($smtp =~
/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
? pack('C4',$1,$2,$3,$4)
: (gethostbyname($smtp))[4];

if (!defined($smtpaddr))
{
return(-1);
}

if (!socket(MAIL, AF_INET, SOCK_STREAM, $proto))
{
return(-2);
}

if (!connect(MAIL, pack('Sna4x8', AF_INET, $port, $smtpaddr)))
{
return(-3);
}

my($oldfh) = select(MAIL);
$| = 1;
select($oldfh);

$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-4);
}

print MAIL "helo $SMTP_SERVER\r\n";
$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-5);
}

print MAIL "mail from: <$fromaddr>\r\n";
$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-5);
}

foreach (split(/, /, $to))
{
print MAIL "rcpt to: <$_>\r\n";
$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-6);
}
}

print MAIL "data\r\n";
$_ = <MAIL>;
if (/^[45]/)
{
close MAIL;
return(-5);
}

}

if ($SEND_MAIL ne "")
{
open (MAIL,"| $SEND_MAIL");
}

print MAIL "To: $to\n";
print MAIL "From: $fromaddr\n";
print MAIL "Reply-to: $replyaddr\n" if $replyaddr;
print MAIL "X-Mailer: Perl Powered Socket Mailer\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$message";
print MAIL "\n.\n";

if ($SMTP_SERVER ne "")
{
$_ = <MAIL>;
if (/^[45]/)
{
close(MAIL);
return(-7);
}

print MAIL "quit\r\n";
$_ = <MAIL>;
}

close(MAIL);
return(1);
}
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 04:42:58 AM
Please help me to change the script, and then you can email the file. I have to go know, but im going to check my mail in 10 minutes.

Thanks for all you wonderfull help.  :D  Bye...
Title: Formmail!!?
Post by: Guldstrand on November 21, 2003, 09:26:49 AM
I have downloaded a cgi-script from Matt's Script Archive, but i cant get it to work.   :?

I came to the thank you page, but i havent recieved any mails yet from my forms.  :shock:
Can someone please check the code and help me!?  :oops:

Code: [Select]
#!/usr/bin/perl
##############################################################################
# FormMail                        Version 1.92                               #
# Copyright 1995-2002 Matt Wright mattw@scriptarchive.com                    #
# Created 06/09/95                Last Modified 04/21/02                     #
# Matt's Script Archive, Inc.:    http://www.scriptarchive.com/              #
##############################################################################
# COPYRIGHT NOTICE                                                           #
# Copyright 1995-2002 Matthew M. Wright  All Rights Reserved.                #
#                                                                            #
# FormMail may be used and modified free of charge by anyone so long as this #
# copyright notice and the comments above remain intact.  By using this      #
# code you agree to indemnify Matthew M. Wright from any liability that      #
# might arise from its use.                                                  #
#                                                                            #
# Selling the code for this program without prior written consent is         #
# expressly forbidden.  In other words, please ask first before you try and  #
# make money off of my program.                                              #
#                                                                            #
# Obtain permission before redistributing this software over the Internet or #
# in any other medium. In all cases copyright and header must remain intact. #
##############################################################################
# ACCESS CONTROL FIX: Peter D. Thompson Yezek                                #
#                     http://www.securityfocus.com/archive/1/62033           #
##############################################################################
# Define Variables                                                           #
#      Detailed Information Found In README File.                            #

# $mailprog defines the location of your sendmail program on your unix       #
# system. The flags -i and -t should be passed to sendmail in order to       #
# have it ignore single dots on a line and to read message for recipients    #

$mailprog = '/usr/lib/sendmail -i -t';

# @referers allows forms to be located only on servers which are defined     #
# in this field.  This security fix from the last version which allowed      #
# anyone on any server to use your FormMail script on their web site.        #

@referers = ('webb.guldstrands.net','guldstrands.net');

# @recipients defines the e-mail addresses or domain names that e-mail can   #
# be sent to.  This must be filled in correctly to prevent SPAM and allow    #
# valid addresses to receive e-mail.  Read the documentation to find out how #
# this variable works!!!  It is EXTREMELY IMPORTANT.                         #
@recipients = &fill_recipients(@referers);

# ACCESS CONTROL FIX: Peter D. Thompson Yezek                                #
# @valid_ENV allows the sysadmin to define what environment variables can    #
# be reported via the env_report directive.  This was implemented to fix     #
# the problem reported at http://www.securityfocus.com/bid/1187              #

@valid_ENV = ('REMOTE_HOST','REMOTE_ADDR','REMOTE_USER','HTTP_USER_AGENT');

# Done                                                                       #
##############################################################################

# Check Referring URL
&check_url;

# Retrieve Date
&get_date;

# Parse Form Contents
&parse_form;

# Check Required Fields
&check_required;

# Send E-Mail
&send_mail;

# Return HTML Page or Redirect User
&return_html;

# NOTE rev1.91: This function is no longer intended to stop abuse, that      #
#    functionality is now embedded in the checks made on @recipients and the #
#    recipient form field.                                                   #

sub check_url {

    # Localize the check_referer flag which determines if user is valid.     #
    local($check_referer) = 0;

    # If a referring URL was specified, for each valid referer, make sure    #
    # that a valid referring URL was passed to FormMail.                     #

    if ($ENV{'HTTP_REFERER'}) {
        foreach $referer (@referers) {
            if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) {
                $check_referer = 1;
                last;
            }
        }
    }
    else {
        $check_referer = 1;
    }

    # If the HTTP_REFERER was invalid, send back an error.                   #
    if ($check_referer != 1) { &error('bad_referer') }
}

sub get_date {

    # Define arrays for the day of the week and month of the year.           #
    @days   = ('Sunday','Monday','Tuesday','Wednesday',
               'Thursday','Friday','Saturday');
    @months = ('January','February','March','April','May','June','July',
               'August','September','October','November','December');

    # Get the current time and format the hour, minutes and seconds.  Add    #
    # 1900 to the year to get the full 4 digit year.                         #
    ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6];
    $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
    $year += 1900;

    # Format the date.                                                       #
    $date = "$days[$wday], $months[$mon] $mday, $year at $time";

}

sub parse_form {

    # Define the configuration associative array.                            #
    %Config = ('recipient','',          'subject','',
               'email','',              'realname','',
               'redirect','',           'bgcolor','',
               'background','',         'link_color','',
               'vlink_color','',        'text_color','',
               'alink_color','',        'title','',
               'sort','',               'print_config','',
               'required','',           'env_report','',
               'return_link_title','',  'return_link_url','',
               'print_blank_fields','', 'missing_fields_redirect','');

    # Determine the form's REQUEST_METHOD (GET or POST) and split the form   #
    # fields up into their name-value pairs.  If the REQUEST_METHOD was      #
    # not GET or POST, send an error.                                        #
    if ($ENV{'REQUEST_METHOD'} eq 'GET') {
        # Split the name-value pairs
        @pairs = split(/&/, $ENV{'QUERY_STRING'});
    }
    elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
        # Get the input
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
 
        # Split the name-value pairs
        @pairs = split(/&/, $buffer);
    }
    else {
        &error('request_method');
    }

    # For each name-value pair:                                              #
    foreach $pair (@pairs) {

        # Split the pair up into individual variables.                       #
        local($name, $value) = split(/=/, $pair);
 
        # Decode the form encoding on the name and value variables.          #
        # v1.92: remove null bytes                                           #
        $name =~ tr/+/ /;
        $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $name =~ tr/\0//d;

        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ tr/\0//d;

        # If the field name has been specified in the %Config array, it will #
        # return a 1 for defined($Config{$name}}) and we should associate    #
        # this value with the appropriate configuration variable.  If this   #
        # is not a configuration form field, put it into the associative     #
        # array %Form, appending the value with a ', ' if there is already a #
        # value present.  We also save the order of the form fields in the   #
        # @Field_Order array so we can use this order for the generic sort.  #
        if (defined($Config{$name})) {
            $Config{$name} = $value;
        }
        else {
            if ($Form{$name} ne '') {
                $Form{$name} = "$Form{$name}, $value";
            }
            else {
                push(@Field_Order,$name);
                $Form{$name} = $value;
            }
        }
    }

    # The next six lines remove any extra spaces or new lines from the       #
    # configuration variables, which may have been caused if your editor     #
    # wraps lines after a certain length or if you used spaces between field #
    # names or environment variables.                                        #
    $Config{'required'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'required'} =~ s/(\s+)?\n+(\s+)?//g;
    $Config{'env_report'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'env_report'} =~ s/(\s+)?\n+(\s+)?//g;
    $Config{'print_config'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
    $Config{'print_config'} =~ s/(\s+)?\n+(\s+)?//g;

    # Split the configuration variables into individual field names.         #
    @Required = split(/,/,$Config{'required'});
    @Env_Report = split(/,/,$Config{'env_report'});
    @Print_Config = split(/,/,$Config{'print_config'});

    # ACCESS CONTROL FIX: Only allow ENV variables in @valid_ENV in          #
    # @Env_Report for security reasons.                                      #
    foreach $env_item (@Env_Report) {
        foreach $valid_item (@valid_ENV) {
            if ( $env_item eq $valid_item ) { push(@temp_array, $env_item) }
        }
    }
    @Env_Report = @temp_array;
}

sub check_required {

    # Localize the variables used in this subroutine.                        #
    local($require, @error);

    # The following insures that there were no newlines in any fields which  #
    # will be used in the header.                                            #
    if ($Config{'subject'} =~ /(\n|\r)/m || $Config{'email'} =~ /(\n|\r)/m ||
        $Config{'realname'} =~ /(\n|\r)/m || $Config{'recipient'} =~ /(\n|\r)/m) {
        &error('invalid_headers');
    }

    if (!$Config{'recipient'}) {
        if (!defined(%Form)) { &error('bad_referer') }
        else                 { &error('no_recipient') }
    }
    else {
        # This block of code requires that the recipient address end with    #
        # a valid domain or e-mail address as defined in @recipients.        #
        $valid_recipient = 0;
        foreach $send_to (split(/,/,$Config{'recipient'})) {
            foreach $recipient (@recipients) {
                if ($send_to =~ /$recipient$/i) {
                    push(@send_to,$send_to); last;
                }
            }
        }
        if ($#send_to < 0) { &error('no_recipient') }
        $Config{'recipient'} = join(',',@send_to);
    }

    # For each require field defined in the form:                            #
    foreach $require (@Required) {

        # If the required field is the email field, the syntax of the email  #
        # address if checked to make sure it passes a valid syntax.          #
        if ($require eq 'email' && !&check_email($Config{$require})) {
            push(@error,$require);
        }

        # Otherwise, if the required field is a configuration field and it   #
        # has no value or has been filled in with a space, send an error.    #
        elsif (defined($Config{$require})) {
            if ($Config{$require} eq '') { push(@error,$require); }
        }

        # If it is a regular form field which has not been filled in or      #
        # filled in with a space, flag it as an error field.                 #
        elsif (!defined($Form{$require}) || $Form{$require} eq '') {
            push(@error,$require);
        }
    }

    # If any error fields have been found, send error message to the user.   #
    if (@error) { &error('missing_fields', @error) }
}

sub return_html {
    # Local variables used in this subroutine initialized.                   #
    local($key,$sort_order,$sorted_field);

    # Now that we have finished using form values for any e-mail related     #
    # reasons, we will convert all of the form fields and config values      #
    # to remove any cross-site scripting security holes.                     #
    local($field);
    foreach $field (keys %Config) {
        $safeConfig{$field} = &clean_html($Config{$field});
    }

    foreach $field (keys %Form) {
        $Form{$field} = &clean_html($Form{$field});
    }


    # If redirect option is used, print the redirectional location header.   #
    if ($Config{'redirect'}) {
        print "Location: $safeConfig{'redirect'}\n\n";
    }

    # Otherwise, begin printing the response page.                           #
    else {

        # Print HTTP header and opening HTML tags.                           #
        print "Content-type: text/html\n\n";
        print "<html>\n <head>\n";

        # Print out title of page                                            #
        if ($Config{'title'}) { print "<title>$safeConfig{'title'}</title>\n" }
        else                  { print "<title>Thank You</title>\n"        }

        print " </head>\n <body";

        # Get Body Tag Attributes                                            #
        &body_attributes;

        # Close Body Tag                                                     #
        print ">\n  <center>\n";

        # Print custom or generic title.                                     #
        if ($Config{'title'}) { print "<h1>$safeConfig{'title'}</h1>\n" }
        else { print "<h1>Thank You For Filling Out This Form</h1>\n" }

        print "</center>\n";

        print "Below is what you submitted to $safeConfig{'recipient'} on ";
        print "$date<p><hr size=1 width=75\%><p>\n";

        # If a sort order is specified, sort the form fields based on that.  #
        if ($Config{'sort'} =~ /^order:.*,.*/) {

            # Set the temporary $sort_order variable to the sorting order,   #
            # remove extraneous line breaks and spaces, remove the order:    #
            # directive and split the sort fields into an array.             #
            $sort_order = $Config{'sort'};
            $sort_order =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
            $sort_order =~ s/(\s+)?\n+(\s+)?//g;
            $sort_order =~ s/order://;
            @sorted_fields = split(/,/, $sort_order);

            # For each sorted field, if it has a value or the print blank    #
            # fields option is turned on print the form field and value.     #
            foreach $sorted_field (@sorted_fields) {
                local $sfname = &clean_html($sorted_field);

                if ($Config{'print_blank_fields'} || $Form{$sorted_field} ne '') {
                    print "<b>$sfname:</b> $Form{$sorted_field}<p>\n";
                }
            }
        }

        # Otherwise, use the order the fields were sent, or alphabetic.      #
        else {

            # Sort alphabetically if requested.
            if ($Config{'sort'} eq 'alphabetic') {
                @Field_Order = sort @Field_Order;
            }

            # For each form field, if it has a value or the print blank      #
            # fields option is turned on print the form field and value.     #
            foreach $field (@Field_Order) {
                local $fname = &clean_html($field);

                if ($Config{'print_blank_fields'} || $Form{$field} ne '') {
                    print "<b>$fname:</b> $Form{$field}<p>\n";
                }
            }
        }

        print "<p><hr size=1 width=75%><p>\n";

        # Check for a Return Link and print one if found.                    #
        if ($Config{'return_link_url'} && $Config{'return_link_title'}) {
            print "<ul>\n";
            print "<li><a href=\"$safeConfig{'return_link_url'}\">$safeConfig{'return_link_title'}</a>\n";
            print "</ul>\n";
        }

        # Print the page footer.                                             #
        print <<"(END HTML FOOTER)";
        <hr size=1 width=75%><p>
        <center><font size=-1><a href="http://www.scriptarchive.com/formmail.html">FormMail</a> V1.92 & 1995 - 2002  Matt Wright<br>
A Free Product of <a href="http://www.scriptarchive.com/">Matt's Script Archive, Inc.</a></font></center>
        </body>
       </html>
(END HTML FOOTER)
    }
}

sub send_mail {
    # Localize variables used in this subroutine.                            #
    local($print_config,$key,$sort_order,$sorted_field,$env_report);

    # Open The Mail Program
    open(MAIL,"|$mailprog");

    print MAIL "To: $Config{'recipient'}\n";
    print MAIL "From: $Config{'email'} ($Config{'realname'})\n";

    # Check for Message Subject
    if ($Config{'subject'}) { print MAIL "Subject: $Config{'subject'}\n\n" }
    else                    { print MAIL "Subject: WWW Form Submission\n\n" }

    print MAIL "Below is the result of your feedback form.  It was submitted by\n";
    print MAIL "$Config{'realname'} ($Config{'email'}) on $date\n";
    print MAIL "-" x 75 . "\n\n";

    if (@Print_Config) {
        foreach $print_config (@Print_Config) {
            if ($Config{$print_config}) {
                print MAIL "$print_config: $Config{$print_config}\n\n";
            }
        }
    }

    # If a sort order is specified, sort the form fields based on that.      #
    if ($Config{'sort'} =~ /^order:.*,.*/) {

        # Remove extraneous line breaks and spaces, remove the order:        #
        # directive and split the sort fields into an array.                 #
        local $sort_order = $Config{'sort'};
        $sort_order =~ s/(\s+|\n)?,(\s+|\n)?/,/g;
        $sort_order =~ s/(\s+)?\n+(\s+)?//g;
        $sort_order =~ s/order://;
        @sorted_fields = split(/,/, $sort_order);

        # For each sorted field, if it has a value or the print blank        #
        # fields option is turned on print the form field and value.         #
        foreach $sorted_field (@sorted_fields) {
            if ($Config{'print_blank_fields'} || $Form{$sorted_field} ne '') {
                print MAIL "$sorted_field: $Form{$sorted_field}\n\n";
            }
        }
    }

    # Otherwise, print fields in order they were sent or alphabetically.     #
    else {

        # Sort alphabetically if specified:                                  #
        if ($Config{'sort'} eq 'alphabetic') {
            @Field_Order = sort @Field_Order;
        }

        # For each form field, if it has a value or the print blank          #
        # fields option is turned on print the form field and value.         #
        foreach $field (@Field_Order) {
            if ($Config{'print_blank_fields'} || $Form{$field} ne '') {
                print MAIL "$field: $Form{$field}\n\n";
            }
        }
    }

    print MAIL "-" x 75 . "\n\n";

    # Send any specified Environment Variables to recipient.                 #
    foreach $env_report (@Env_Report) {
        if ($ENV{$env_report}) {
            print MAIL "$env_report: $ENV{$env_report}\n";
        }
    }

    close (MAIL);
}

sub check_email {
    # Initialize local email variable with input to subroutine.              #
    $email = $_[0];

    # If the e-mail address contains:                                        #
    if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||

        # the e-mail address contains an invalid syntax.  Or, if the         #
        # syntax does not match the following regular expression pattern     #
        # it fails basic syntax verification.                                #

        $email !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z0-9]+)(\]?)$/) {

        # Basic syntax requires:  one or more characters before the @ sign,  #
        # followed by an optional '[', then any number of letters, numbers,  #
        # dashes or periods (valid domain/IP characters) ending in a period  #
        # and then 2 or 3 letters (for domain suffixes) or 1 to 3 numbers    #
        # (for IP addresses).  An ending bracket is also allowed as it is    #
        # valid syntax to have an email address like: user@[255.255.255.0]   #

        # Return a false value, since the e-mail address did not pass valid  #
        # syntax.                                                            #
        return 0;
    }

    else {

        # Return a true value, e-mail verification passed.                   #
        return 1;
    }
}

# This was added into v1.91 to further secure the recipients array.  Now, by #
# default it will assume that valid recipients include only users with       #
# usernames A-Z, a-z, 0-9, _ and - that match your domain exactly.  If this  #
# is not what you want, you should read more detailed instructions regarding #
# the configuration of the @recipients variable in the documentation.        #
sub fill_recipients {
    local(@domains) = @_;
    local($domain,@return_recips);

    foreach $domain (@domains) {
        if ($domain =~ /^\d+\.\d+\.\d+\.\d+$/) {
            $domain =~ s/\./\\\./g;
            push(@return_recips,'^[\w\-\.]+\@\[' . $domain . '\]');
        }
        else {
            $domain =~ s/\./\\\./g;
            $domain =~ s/\-/\\\-/g;
            push(@return_recips,'^[\w\-\.]+\@' . $domain);
        }
    }

    return @return_recips;
}

# This function will convert <, >, & and " to their HTML equivalents.        #
sub clean_html {
    local $value = $_[0];
    $value =~ s/\&/\&/g;
    $value =~ s/</\&/g;
    $value =~ s/>/\&/g;
    $value =~ s/"/\&/g;
    return $value;
}

sub body_attributes {
    # Check for Background Color
    if ($Config{'bgcolor'}) { print " bgcolor=\"$safeConfig{'bgcolor'}\"" }

    # Check for Background Image
    if ($Config{'background'}) { print " background=\"$safeConfig{'background'}\"" }

    # Check for Link Color
    if ($Config{'link_color'}) { print " link=\"$safeConfig{'link_color'}\"" }

    # Check for Visited Link Color
    if ($Config{'vlink_color'}) { print " vlink=\"$safeConfig{'vlink_color'}\"" }

    # Check for Active Link Color
    if ($Config{'alink_color'}) { print " alink=\"$safeConfig{'alink_color'}\"" }

    # Check for Body Text Color
    if ($Config{'text_color'}) { print " text=\"$safeConfig{'text_color'}\"" }
}

sub error {
    # Localize variables and assign subroutine input.                        #
    local($error,@error_fields) = @_;
    local($host,$missing_field,$missing_field_list);

    if ($error eq 'bad_referer') {
        if ($ENV{'HTTP_REFERER'} =~ m|^https?://([\w\.]+)|i) {
            $host = $1;
            my $referer = &clean_html($ENV{'HTTP_REFERER'});
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Bad Referrer - Access Denied</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Bad Referrer - Access Denied</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>The form attempting to use
     <a href="http://www.scriptarchive.com/formmail.html">FormMail</a>
     resides at <tt>$referer</tt>, which is not allowed to access
     this cgi script.<p>

     If you are attempting to configure FormMail to run with this form, you need
     to add the following to \@referers, explained in detail in the
     <a href="http://www.scriptarchive.com/readme/formmail.html">README</a> file.<p>

     Add <tt>'$host'</tt> to your <tt><b>\@referers</b></tt> array.<hr size=1>
     <center><font size=-1>
      <a href="http://www.scriptarchive.com/formmail.html">FormMail</a> V1.92 & 1995 - 2002  Matt Wright<br>
      A Free Product of <a href="http://www.scriptarchive.com/">Matt's Script Archive, Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
        }
        else {
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>FormMail v1.92</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>FormMail</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><th><tt><font size=+1>Copyright 1995 - 2002 Matt Wright<br>
        Version 1.92 - Released April 21, 2002<br>
        A Free Product of <a href="http://www.scriptarchive.com/">Matt's Script Archive,
        Inc.</a></font></tt></th></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
        }
    }

    elsif ($error eq 'request_method') {
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Error: Request Method</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Error: Request Method</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>The Request Method of the Form you submitted did not match
     either <tt>GET</tt> or <tt>POST</tt>.  Please check the form and make sure the
     <tt>method=</tt> statement is in upper case and matches <tt>GET</tt> or <tt>POST</tt>.<p>

     <center><font size=-1>
      <a href="http://www.scriptarchive.com/formmail.html">FormMail</a> V1.92 & 1995 - 2002  Matt Wright<br>
      A Free Product of <a href="http://www.scriptarchive.com/">Matt's Script Archive, Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
    }

    elsif ($error eq 'no_recipient') {
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Error: Bad/No Recipient</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Error: Bad/No Recipient</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>There was no recipient or an invalid recipient specified in the data sent to FormMail.  Please
     make sure you have filled in the <tt>recipient</tt> form field with an e-mail
     address that has been configured in <tt>\@recipients</tt>.  More information on filling in <tt>recipient</tt> form fields and variables can be
     found in the <a href="http://www.scriptarchive.com/readme/formmail.html">README</a> file.<hr size=1>

     <center><font size=-1>
      <a href="http://www.scriptarchive.com/formmail.html">FormMail</a> V1.92 & 1995 - 2002  Matt Wright<br>
      A Free Product of <a href="http://www.scriptarchive.com/">Matt's Script Archive, Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
    }

    elsif ($error eq 'invalid_headers') {
            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Error: Bad Header Fields</title>
 </head>
 <body bgcolor=#FFFFFF text=#000000>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Error: Bad Header Fields</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>The header fields, which include <tt>recipient</tt>, <tt>email</tt>, <tt>realname</tt> and <tt>subject</tt> were
     filled in with invalid values. You may not include any newline characters in these parameters.
     More information on filling in these form fields and variables can be
     found in the <a href="http://www.scriptarchive.com/readme/formmail.html">README</a> file.<hr size=1>

     <center><font size=-1>
      <a href="http://www.scriptarchive.com/formmail.html">FormMail</a> V1.92 & 1995 - 2002  Matt Wright<br>
      A Free Product of <a href="http://www.scriptarchive.com/">Matt's Script Archive, Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
    }

    elsif ($error eq 'missing_fields') {
        if ($Config{'missing_fields_redirect'}) {
            print "Location: " . &clean_html($Config{'missing_fields_redirect'}) . "\n\n";
        }
        else {
            foreach $missing_field (@error_fields) {
                $missing_field_list .= "<li>" . &clean_html($missing_field) . "\n";
            }

            print <<"(END ERROR HTML)";
Content-type: text/html

<html>
 <head>
  <title>Error: Blank Fields</title>
 </head>
  <center>
   <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Error: Blank Fields</font></th></tr>
   </table>
   <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>The following fields were left blank in your submission form:<p>
     <ul>
$missing_field_list
     </ul><br>

     These fields must be filled in before you can successfully submit the form.<p>
     Please use your browser's back button to return to the form and try again.<hr size=1>
     <center><font size=-1>
      <a href="http://www.scriptarchive.com/formmail.html">FormMail</a> V1.92 & 1995 - 2002  Matt Wright<br>
      A Free Product of <a href="http://www.scriptarchive.com/">Matt's Script Archive, Inc.</a>
     </font></center>
    </td></tr>
   </table>
  </center>
 </body>
</html>
(END ERROR HTML)
        }
    }

    exit;
}
Title: Formmail!!?
Post by: steve on November 21, 2003, 09:49:14 AM
Quote from: Guldstrand
I have downloaded a cgi-script from Matt's Script Archive, but i cant get it to work.   :?

I came to the thank you page, but i havent recieved any mails yet from my forms.  :shock:
Can someone please check the code and help me!?  :oops:

I know they disabled the use of "formmail.pl" on the servers, but if you rename the script to fmail.pl or something similar it should circumvent the restriction.

What error are you getting?
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 09:50:51 AM
I can't help you with Matt's script.  I can only help you with the one I use (bnbform.cgi) since I am only familiar with it.

I was thinking that this morning I would try filling out the form on your server/website to see if I got the same error message as you with the bnbform.cgi.

Here's what's true ...

1) I was able to process your form on my server - so the fact is that the form and script works fine (you received the two e-mails from my filling out the form)
2) You said you uploaded in ASCII and chmod to 755 (I can't verify that on my end, so I will trust that you did that correctly.)
3) You said you changed the script name to "bnbform.cgi" (again, I can't verify that, but I will take your word.)

So, the only conclusion is that if it isn't working for you, it may have to do with your computer setting - like having too high a security set in your browser or something.  Sometimes forms get the "Can't run from here" when some security setting is too high.

Anyway, I was going to try to fill out the form on your server today to see if it may indeed work, thus knowing for sure if it's just your computer.  Oh well.

Good luck.  Hopefully, someone else can help you.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 10:14:45 AM
P.S. Regarding Matt's script ...

Try adding your domains with the www, also to the referers line.  Example:

@referers = ('webb.guldstrands.net','guldstrands.net','www.guldstrands.net','www.webb.guldstrands.net');

I don't know if that will do it, but my last shot to try to help you at least  :wink:
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 08:27:30 PM
Daniel,

I got your e-mail, but please don't e-mail me.  Please post to this forum.   I only gave it to you to attach the script since that seemed the only solution at that point in the situation.  You need to post here so that others can help you if I cannot.

Also, I don't work for LunarPages and any help I give you has to be when I can (I can't stay up again until 4:00 a.m. trying to help you with this.)

Okay, we have to start ALL over again from scratch.

You said in your e-mail that you put the bnbform.cgi script back, but I looked at your form on the website, and it still has the FormMail fields.  You need to go back through this thread from the beginning and follow the instructions I gave you, to get the form fields and hidden tags correct to what the bnbform.cgi script needs.

This you have to do first, on your own.  Then post that it's up and ready, then I'll look at the form on your website and I'll check it and test it.

My husband wants to watch a DVD together tonight, so I'm not going to be at my desk the entire time.  I will check back periodically, or after the movie.
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 08:32:24 PM
P.S. The "email" value needs to be changed to "submit_by".
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 09:43:19 PM
Okay, Daniel ... I'm having some other people test your form (the old one that I originally did for you - NOT the one that has the FormMail values) that I put on my server.  That way, we can see if they get the same Error page as you get, or if they see the Thank You page that I get.

We might then get closer to the problem.

You will probably be getting several test e-mails.  I told them to put "support@guldstrands.net" for the submit_by in case they don't want to give you their e-mail addy.

I'll let you know what the verdict is.

*edited - You can view the thread here for the results ...

* this portion of the post has been removed as it is no longer needed *
Title: Formmail!!?
Post by: leighsww on November 21, 2003, 10:37:57 PM
Something I just thought of,

Just copy the form off the sample one I have on my site.  You then can copy it onto your server.  Since it's working on my server, we know the script and form works.

Now, you have to make sure that you have your chmod and action correct on your side to make it work on your server like it did on mine.

Although the one on my server hasn't worked for you, the test ones from other people did, so your computer is somehow having the problem.  Like I said earlier, it could be a firewall or high security setting that is causing the "can't run form here" error.
Title: Still problems...!
Post by: Guldstrand on November 22, 2003, 10:32:15 AM
I have copied the script from your site (leighsww) and upload it into my server, but i dont came to a thank you page, only to a page with this message:
Sorry....Cant run from here!

I have recieved many test-mail to support@guldstrands.net, so we know thats working, but not on my server, page.   :cry:

What is wrong with my computer, where are im supposed to configure so it work!?

Need som help soon!   :roll:

I have only modem, so i cant be inlogged all the time. But im checking this forum anyways.
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 10:39:30 AM
I get the "Thank You" page when I test it out on YOUR server, so it's working on your server, as well.

Did you get the form back with "Testing from your server" in the comment section?

Here's the URL that I tested your form from ...

http://webb.guldstrands.net/kontakt.html

It's your computer.  Like I told you, you must have your anti-virus program blocking it.  If you temporarily disable it just to test the form out, you should get the Thank You page, too.

You can enable the anti-virus when you finish testing.
Title: Formmail!!?
Post by: Guldstrand on November 22, 2003, 10:44:01 AM
Quote from: leighsww
I get the "Thank You" page when I test it out on YOUR server, so it's working.

Did you get the form back with "Testing from your server" in the comment section?

Here's the URL that I tested your form from ...

http://webb.guldstrands.net/kontakt.html

It's your computer.  Like I told you, you must have your anti-virus program blocking it.  If you temporarily disable it just to test the script, you should get the Thank You page, too.

You can enable the anti-virus when you finish testing.


But what if other people have the same problem as me, whrn they try to contact me on my forms!?
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 10:49:03 AM
Well, if they have their anti-virus program blocking forms, then what can I tell you.  Can you fill out other forms on the Internet?

We have corrected your form/script problem, so from here you have to decide what you want to do.  I don't know if any other script will work for you, since you seemed to have the same problem with the FormMail.pl.  So, it's your computer and not the script that's the problem.
Title: ????
Post by: Guldstrand on November 22, 2003, 10:51:13 AM
Yes, i think i can fill out other forms and send them. I cant remember.
Title: Formmail!!?
Post by: Ed on November 22, 2003, 11:39:10 AM
Just a thought, you may want to change:

<form action=/cgi-bin/bnbform.cgi method=post>

To:
<form action="/cgi-bin/bnbform.cgi" method="post">

I've seen that act up at times.


I Just tested it and it appeasr to have worked.

What does it look like when it says "can't run from here"? It is a little window that pops up or on the text of the website or what?
If a window pops up.. then its your antivirus, but that totally doesn't make sense instead... looking at the code:

##################################################################
sub valid_page
{
if (@okaydomains == 0)
{return;}
$DOMAIN_OK=0;
$RF=$ENV{'HTTP_REFERER'};
$RF=~tr/A-Z/a-z/;
foreach $ts (@okaydomains)
{
if ($RF =~ /$ts/)
{ $DOMAIN_OK=1; }
}
if ( $DOMAIN_OK == 0)
{print "Content-type: text/html\n\n Sorry....Cant run from here!";
exit;
}
}

Its the @domains allowed array thats causing probs. Make sure you add the address you are using to access it from Daniel. Its possible that we are all using a different place to do it from.


- Ed
Title: Formmail!!?
Post by: Ed on November 22, 2003, 11:47:09 AM
What you may want to do is temporarily put a # infront of @okaydomains to see if it runs. It SHOULD run once that is in place. Then we will all be on common ground and can figure out why only you cannot access it.

Could you post the URL of the page when you get that error?

- Ed
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 11:53:59 AM
I just tested out the form again on ...

http://webb.guldstrands.net/kontakt.html

and got the Thank You page.

Okay, Daniel, follow Ed's (Kata) instructions and that may help you get to the root of your problem with the form/script not working for you.
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 12:00:34 PM
Quote from: Kata
What does it look like when it says "can't run from here"? It is a little window that pops up or on the text of the website or what?
If a window pops up.. then its your antivirus, but that totally doesn't make sense instead... looking at the code:

##################################################################
sub valid_page
{
if (@okaydomains == 0)
{return;}
$DOMAIN_OK=0;
$RF=$ENV{'HTTP_REFERER'};
$RF=~tr/A-Z/a-z/;
foreach $ts (@okaydomains)
{
if ($RF =~ /$ts/)
{ $DOMAIN_OK=1; }
}
if ( $DOMAIN_OK == 0)
{print "Content-type: text/html\n\n Sorry....Cant run from here!";
exit;
}
}

Its the @domains allowed array thats causing probs. Make sure you add the address you are using to access it from Daniel. Its possible that we are all using a different place to do it from. - Ed


I had a customer call me when she tried filling out my form on my website and she said it said "Can't Run from Here".  Since I knew that many, many other customers could place their orders on my site, it had to be something with her computer.  So, I told her to disable her anti-virus just to fill out the form and sure enough ... it then worked for her and she could place her order.

Thus, I figured that if others can submit the form with no problems, then it's got to be the individual's computer/anti-virus settings that is causing the error.

*edited - I think that the "Can't Run from Here" error that is in the script will also appear if the okaydomains are incorrect, as well.  But, I feel we can rule that out for Daniel's case, because all of us can submit his form without problems.

That's my assessment, anyway.
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 12:18:24 PM
Quote from: Kata
Its possible he is using a different URL to access it then we were..

maybe http://www.webb.gu...... instead of http://webb.gul....
- Ed


The URL he gave me to access his form is (it's in one of his earlier posts on the first page of this thread) ...

http://webb.guldstrands.net/kontakt.html

So, if he's using a different URL himself to try out the form, then Daniel, you need to give us that URL so we are testing apples to apples.  Otherwise, we are all spinning wheels, here.
Title: Formmail!!?
Post by: Ed on November 22, 2003, 12:54:33 PM
Quote from: leighsww
I had a customer call me when she tried filling out my form on my website and she said it said "Can't Run from Here".  Since I knew that many, many other customers could place their orders on my site, it had to be something with her computer.  So, I told her to disable her anti-virus just to fill out the form and sure enough ... it then worked for her and she could place her order.

Thus, I figured that if others can submit the form with no problems, then it's got to be the individual's computer/anti-virus settings that is causing the error.


What is happening from how I understand they work is that IE on the users computer is accessing not the web but instead a local web proxy which is the users antivirus software. This in turn requests the website. So all of a sudden instead of: the request url being: http://domain.com/form.html its:

localproxy:8080/?http://domain.com/form.html The server looks at it, says "I'm sorry localproxy:8080 is not allowed to access this script". So its the cgi script giving the error, but the anitvirus software causing it :-) So were both right (LOL).

It may be possible to use a wildcard in the @okaydomains. such as: "*guldstrand.net*" to ensure that the antivirus software wont cause a problem.

- Ed
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 12:57:05 PM
Ahhh, you are very knowledgeable, Master Ed.

I could learn a lot from you!  :D


P.S.  Notice I said "Master" and NOT "Mister" (if you're too young to know the TV series, then you won't get it). :wink:

*edited - You could look it up on Google, but who knows what other Mister Ed definitions will be there with all the luck we're having with definitions these days. :wink:
Title: Formmail!!?
Post by: Ed on November 22, 2003, 01:04:11 PM
I don't know if I know the TV series - I grew up without a tv.. lived on the computer instead :-) So I possible should know it but who knows!

- Ed
Title: NO!
Post by: Guldstrand on November 22, 2003, 03:30:09 PM
Quote from: Kata
Just a thought, you may want to change:

<form action=/cgi-bin/bnbform.cgi method=post>

To:
<form action="/cgi-bin/bnbform.cgi" method="post">

I've seen that act up at times.


I Just tested it and it appeasr to have worked.

What does it look like when it says "can't run from here"? It is a little window that pops up or on the text of the website or what?
If a window pops up.. then its your antivirus, but that totally doesn't make sense instead... looking at the code:

##################################################################
sub valid_page
{
if (@okaydomains == 0)
{return;}
$DOMAIN_OK=0;
$RF=$ENV{'HTTP_REFERER'};
$RF=~tr/A-Z/a-z/;
foreach $ts (@okaydomains)
{
if ($RF =~ /$ts/)
{ $DOMAIN_OK=1; }
}
if ( $DOMAIN_OK == 0)
{print "Content-type: text/html\n\n Sorry....Cant run from here!";
exit;
}
}

Its the @domains allowed array thats causing probs. Make sure you add the address you are using to access it from Daniel. Its possible that we are all using a different place to do it from.


- Ed


Its not a little pop-up windows who says "Cant run from here", its the page i come to after i clicked on send  (http://webb.guldstrands.net/cgi-bin/bnbform.cgi)
Title: URL
Post by: Guldstrand on November 22, 2003, 03:33:11 PM
Quote from: Kata
What you may want to do is temporarily put a # infront of @okaydomains to see if it runs. It SHOULD run once that is in place. Then we will all be on common ground and can figure out why only you cannot access it.

Could you post the URL of the page when you get that error?

- Ed


The URL is:  http://webb.guldstrands.net/cgi-bin/bnbform.cgi
Title: Formmail!!?
Post by: Ed on November 22, 2003, 03:33:21 PM
Try putting a # before the @okaydomain = ("domain..... part.

That should allow it to work for you.
Once we know that works, we can figure out a way to make it work for you.

- Ed
Title: Re: URL
Post by: leighsww on November 22, 2003, 03:36:44 PM
Quote from: Guldstrand
The URL is:  http://webb.guldstrands.net/cgi-bin/bnbform.cgi


Okay, this is good to know.  This is definitely calling the error from the script itself, due to that exact sentence is inside the cgi script.

Follow what Ed (Kata) is telling you and he'll probably give you the solution to your problem.
Title: Formmail!!?
Post by: Ed on November 22, 2003, 03:39:09 PM
http://webb.guldstrands.net/cgi-bin/bnbform.cgi ..hmm gives me an error.. interesting.

Let me know ehn you've got the # in place!

- Ed
Title: YEEEEEEEES!!!
Post by: Guldstrand on November 22, 2003, 03:44:45 PM
Finaly, it worked.  :lol:   :D   :wink:

It was the (little) # that caused the BIG problem. *LOL*

Thanks for all the help guys and girls, i hope that i can help you with something else as much that you all have helped me!?  8)

Have a Merry Christmas and a Happy New Year!
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 03:47:23 PM
I was almost going to tell you ... and a "Happy Thanksgiving" but that's an American thing and you're in Germany, are you?

You, have a Merry Christmas and Happy New Year, too!

Thanks, Ed!!!!

You are a sweetheart for helping me out with this, and a darn good problem solver I might add!! :wink:
Title: Formmail!!?
Post by: Ed on November 22, 2003, 03:47:44 PM
You mean the lack of the "#" that caused the problem?

We arn't done yet though :-)

See the problem is by #'ing out that line, you've disabled the security that prevents others from harnessing your form. There are a few work arounds. The whole point of that line to to prevent others from using your server to send spam by limiting who is allowed to connect.

I'm goign to look into it right now, now that we know the culpirt.

- Ed
Title: ????
Post by: Guldstrand on November 22, 2003, 03:50:57 PM
Quote from: Kata
You mean the lack of the "#" that caused the problem?

We arn't done yet though :-)

See the problem is by #'ing out that line, you've disabled the security that prevents others from harnessing your form. There are a few work arounds. The whole point of that line to to prevent others from using your server to send spam by limiting who is allowed to connect.

I'm goign to look into it right now, now that we know the culpirt.

- Ed


Okej, ED!  I dont want others to use my forms to SPAM others. Im waiting for a solution.
Title: Formmail!!?
Post by: Guldstrand on November 22, 2003, 03:52:04 PM
Quote from: leighsww
I was almost going to tell you ... and a "Happy Thanksgiving" but that's an American thing and you're in Germany, are you?

You, have a Merry Christmas and Happy New Year, too!

Thanks, Ed!!!!

You are a sweetheart for helping me out with this, and a darn good problem solver I might add!! :wink:


Eh, no im not living in Germany, im living in SWEDEN.   :roll:
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 03:57:36 PM
Quote from: Guldstrand
Eh, no im not living in Germany, im living in SWEDEN.   :roll:


Oops, I'm so sorry, Daniel.  Since your site is in another language, I couldn't tell.  I assumed it was German, but going back to your site and looking at the spelling of words, I can see that it isn't German.  :oops:

I apologize profusely for the assumption and the mistake.

Forgive me? :lol:
Title: Formmail!!?
Post by: Ed on November 22, 2003, 03:58:11 PM
Ok your going to have to bear with me :-) I'm a little rusty with my perl coding....


Replace the #@okaydomains.....entire line with:

@okaydomains=("guldstrands.net");

Let me know if that works for you.

- Ed
Title: Another form!!?
Post by: Guldstrand on November 22, 2003, 04:00:38 PM
I have a bigger form at http://webb.guldstrands.net/online.html

And i changed the code, all works fine but the results from some of the fields is not showing in the mail.    :cry:

Do you have the time to help me with this to?   :oops:
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 04:00:39 PM
But make a copy of the old script in case you have to put back in all the URLs again, if Ed's test doesn't work.
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 04:03:10 PM
Quote from: Guldstrand
I have a bigger form at http://webb.guldstrands.net/online.html

And i changed the code, all works fine but the results from some of the fields is not showing in the mail.    :cry:

Do you have the time to help me with this to?   :oops:


That's because you have to put in ALL the same values in the form field to the data_order hidden tag.

*edited - Right now that form only has the data_order hidden tag with the other form's values (Namn,submit_by,Meddelande).

You have to add the form field values like Link,fil,Password, etc.

*Edit 2 - The script is case sensitive, so you MUST enter them EXACTLY as you have them in your form values.  If you spelled "Link" with a capital L, then you MUST spell it exactly that way for the data_order hidden tag.  NEVER spell "submit_by" with caps, that is a script variable and MUST be ALL lower case.
Title: Formmail!!?
Post by: Guldstrand on November 22, 2003, 04:03:57 PM
Quote from: Kata
Ok your going to have to bear with me :-) I'm a little rusty with my perl coding....


Replace the #@okaydomains.....entire line with:

@okaydomains=("guldstrands.net");

Let me know if that works for you.

- Ed


I dont understand...   :shock:

The code is now: #@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net","http://www.webb.guldstrands.net","http://guldstrands.net");

What are im supposed to change???
Title: Formmail!!?
Post by: Ed on November 22, 2003, 04:04:51 PM
Also, looking at the source, there are a few nested Forms. I'm not sure if some arn't meant to do anything (one is a form with a slew of hidden tags and no submit info).

I figured we could just go back to the code he posted in this thread a couple pages back.

- Ed
Title: Formmail!!?
Post by: Guldstrand on November 22, 2003, 04:05:25 PM
Quote from: leighsww
That's because you have to put in ALL the same values in the form field to the data_order hidden tag


Can you please explain it more...   :oops:
Title: Formmail!!?
Post by: Ed on November 22, 2003, 04:05:27 PM
Change:

#@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net","http://www.webb.guldstrands.net","http://guldstrands.net");


to:

@okaydomains=("guldstrands.net");

- Ed
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 04:07:31 PM
Quote from: Guldstrand
Quote from: leighsww
That's because you have to put in ALL the same values in the form field to the data_order hidden tag


Can you please explain it more...   :oops:


I have edited the previous post and explained more.  See the *edited part.
Title: Formmail!!?
Post by: Guldstrand on November 22, 2003, 04:09:21 PM
Quote from: Kata
Change:

#@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net","http://www.webb.guldstrands.net","http://guldstrands.net");


to:

@okaydomains=("guldstrands.net");

- Ed


I did the changes as you told me, but now i have the same problems like before  "Cant run from here"

Is it because of the # or what!?
Title: Formmail!!?
Post by: Ed on November 22, 2003, 04:27:18 PM
Ok.. It looks like there is not easy way around that to allow you to access it from a non site (aka virus scanner enabled) as well as keep the form secure.

One last thing to try,

Reaplace: @okaydomains=("guldstrands.net");

with the old:

#@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net","http://www.webb.guldstrands.net","http://guldstrands.net");


Below that line you will see the beginning of the program and "MAIN" etc.. a couple more lines down you will see:

Code: [Select]

$lockfile="/tmp/bnbform.lck";

   $SD=&sys_date;
   $ST=&sys_time;

   &decode_vars;

   &valid_page;



Replace that with:
Code: [Select]

$lockfile="/tmp/bnbform.lck";

   $SD=&sys_date;
   $ST=&sys_time;

   &decode_vars;
$submit_to = "youremailaddress@domain.com";
   &valid_page;


This will make it so that email can only be sent to you through the script.

Its secure in the sense that noone can use it to email spam to anyone other than you.

- Ed
Title: Formmail!!?
Post by: Ed on November 22, 2003, 04:32:58 PM
Replace the youremail address part with the address you want email to be sent to.

- Ed
Title: NO
Post by: Guldstrand on November 22, 2003, 04:33:00 PM
The code is:

Code: [Select]
$lockfile="/tmp/bnbform.lck";

   &decode_vars;
   &valid_page;
   if ($fields{'countfile'} ne "")
      { &get_number; }
   &valid_data;
   &write_data;


...what are im supposed to change?   :shock:
Title: Formmail!!?
Post by: Ed on November 22, 2003, 04:34:48 PM
insert the:

$submit_to = "youremailaddress@domain.com";

on a new line after the
&decode_vars; line.

- Ed
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 04:37:54 PM
Also, while you're in the script, you might want to change the "Thank You" page wording to your language.

Scroll down the script (or do a Find) to where you come to the sentence ...

Thank you!
Your information has been sent and I will be in touch with you soon.
Title: Formmail!!?
Post by: Ed on November 22, 2003, 04:40:32 PM
Watch out for special characters though! ' " @ & etc all will cause you trouble. Try it out before you change the thankyou page info.

- Ed
Title: Okej!
Post by: Guldstrand on November 22, 2003, 04:41:36 PM
Now it works again.

The new code is:

Code: [Select]
#@okaydomains=("http://www.guldstrands.net","http://webb.guldstrands.net","http://www.webb.guldstrands.net","http://guldstrands.net");


#SMTP_SERVER: indicates the name of the host acting as the e-mail
#             gateway. "localhost" should work on most systems.

#$SMTP_SERVER="localhost";

#OR IF SMTP IS UNAVAILABLE TO YOU, USE SEND_MAIL-
# BUT NOT BOTH!

$SEND_MAIL="/usr/sbin/sendmail -t";

$lockfile="/tmp/bnbform.lck";

   &decode_vars;
$submit_to = "support@guldstrands.net";
   &valid_page;
   if ($fields{'countfile'} ne "")
      { &get_number; }
   &valid_data;
   &write_data;


Another thing with my form, how can people attach a file in the form so i can recieve that file on my email???  I have allready put in a file-field and tried to attach a file, and then clicked Skicka (Send). I got the mail, but in the fil field, i only got some text, not a hole file.

And if i want to show the message that the person have submitted on the form in the thank you page, how can i do that??
Title: Formmail!!?
Post by: Ed on November 22, 2003, 04:45:36 PM
bnbform will not allow you to attach files.

I've never tried doign that before, you may have to use a php script etc to do it. If your feeling really technically expert now, take a look at www.hotscripts.com to see if you can find something to attach files with.

- Ed
Title: Okej!
Post by: Guldstrand on November 22, 2003, 05:09:12 PM
Im going to erase the file-fields from the form then.

But if i want to show the message that the person have submitted on the form in the thank you page, how can i do that??
Title: Formmail!!?
Post by: Ed on November 22, 2003, 05:14:13 PM
replace these two lines with what you want to to say:

Thank you for your submission. I will be
getting in touch with you soon.


insert $message wherever you want the content of the message to show.

If that doesn't work..Then I'm not sure what to suggest - its a little bit complex after that.

- Ed
Title: Formmail!!?
Post by: Guldstrand on November 22, 2003, 05:17:43 PM
Quote from: Kata
replace these two lines with what you want to to say:

Thank you for your submission. I will be
getting in touch with you soon.


insert $message wherever you want the content of the message to show.

If that doesn't work..Then I'm not sure what to suggest - its a little bit complex after that.

- Ed


I really dont understand!   :oops:

I want all the results from the formfields to be shown in the thank you page.  There is a code:
Code: [Select]
#$msgtext="";
     #$msgtext .= "On $the_date,\n";
     #$msgtext .=  "The following information was submitted:\n";
     #$msgtext .=  "Host: $ENV{'REMOTE_ADDR'}\n";
Title: Formmail!!?
Post by: Ed on November 22, 2003, 05:30:51 PM
I'm not really sure what to suggest! Take a look at bignosebird.com and his help files. Thats the best place to look.

- Ed
Title: Formmail!!?
Post by: leighsww on November 22, 2003, 05:53:36 PM
Daniel,

Just forget about changing the Thank You page for now.  I think it will dawn on you when the time comes.

I didn't know anything about cgi scripting when I first used the script several years ago for my forms, but through trial-and-error, reading through the script and deducing things from the output that the script produces (like the Thank You page sentence) ... I figured it out.

You will figure it out and know where and when to change the wording of your Thank You page.  We have given you exactly how to do it here in this thread.  So, later you can go back and reread our posts and it might make more sense to you then, and the light bulb will go off.

You may even want to use other attributes of the script.  I use the "ok_url" attribute instead of the default Thank You from the script, but I'm not going to get into that with you here.  You need to do some research (as Ed suggested) on your own.

The script now works for you, you can publish your forms, so just take this time now to get the rest of your forms updated and available for your site.

Have a good weekend!
Title: Formmail!!?
Post by: leighsww on November 23, 2003, 03:00:49 AM
Quote from: Guldstrand
I want all the results from the formfields to be shown in the thank you page


Daniel,

Copy the new bnbform.cgi from bignosebird.com.  Here's the URL ...

http://bignosebird.com/carchive/bnbform/bnbform.txt

Then, put that line of code that Ed gave you.

Do the normal upload in ASCII, rename file "bnbform.cgi" and chmod to 755.

You now will have the Thank You page outputting the results from the form fields.
Title: YES!
Post by: Guldstrand on November 23, 2003, 04:05:03 PM
I copied the new bnbform.cgi from bignosebird.com. And it works fine, thanks to you all.   :lol:
Title: Formmail!!?
Post by: leighsww on November 23, 2003, 04:07:29 PM
Fantastic!!
Title: One other thing!?
Post by: Guldstrand on November 23, 2003, 04:18:04 PM
If i want to ask something about php-scripts, shall i start a new post or can i post the questions here??   :roll:
Title: Formmail!!?
Post by: leighsww on November 23, 2003, 04:19:43 PM
Post it in the PHP section.  There you will find the experts on that.
Title: Formmail!!?
Post by: Guldstrand on November 23, 2003, 04:21:59 PM
Okej, thanks. I was just wondering.   :lol:
Title: Re: Formmail!!?
Post by: SF* on December 05, 2003, 08:58:01 PM
hello can someone
please help me fix my formmail???

here's the url with the form

http://www.sfaustina.com/bloodwars_03_web/abouttext.html

its just a simple email submit form? i seems too always have problems
with this. last time lunar changed the form script...then i got a new
form script and just changed the name and it worked for a month or more.
and now i just founded out that it has not been working and i didnt
change anything???

the form is just matt script

thank you
sf