Avatar billede k_s Nybegynder
23. maj 2001 - 09:17 Der er 33 kommentarer og
1 løsning

Få formmail.pl til at køre på win2000

Jeg skal have et formmail.pl til at køre på en win2000 server under iss. Jeg har inst. denne http://aspn.activestate.com/ASPN/Downloads/ActivePerl/Download?OS=Windows&version=5.6.1&build=626&download=/ActivePerl/Windows/5.6/ActivePerl-5.6.1.626-MSWin32-x86-multi-thread.msi

se også http://www.eksperten.dk/spm/73327

formmail.pl ligger i /cgi-bin/formmail.pl
Når jeg trykker send på siden kommer denne fejl
side kommer frem www.xxxxx.dk/cgi-bin/formmail.pl
\"The page cannot be displayed\"

Jeg skal bruge en der kan hjælpe mig, så det kommer til at virke.
Avatar billede hojben Novice
23. maj 2001 - 09:59 #1
hvordan ser din form ud ? for den skal jo ikke vise din formmail.pl den skal \"GET\" den.
Avatar billede thomasledet Nybegynder
23. maj 2001 - 10:05 #2
dva at du har en form, der sender meg GET til cgi-bin/formmail.pl .... og så siger den \"The page cannot be displayed\"... kommer der nogen specifik http-fejl og i så fald, hvad er den?

har du sat de rigtige permissions? det gøres ikke med chmod på w2k, men skal gøres manuelt med noget point-and-click inde under Internet Services Manager...

den sendmail du bruger... er den skrevet til unix? og hvis den er, har du så ændret sendmailkaldet til blat, eller lavet et direkte socket styring selv?
Avatar billede k_s Nybegynder
24. maj 2001 - 13:05 #3
sådan ser det ud, jeg har rettet de steder hvor der står www.xxxx.dk & xxx@xxxx.dk


<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<HTML><HEAD><TITLE>Add Your Favorite Programs</TITLE>
<META content=\"text/html; charset=windows-1252\" http-equiv=Content-Type>
</HEAD>
<BODY aLink=#098922 bgColor=#ffffff link=#0000d9 text=#000000 vLink=#880000><!--FormMail.pl-->
<FORM action=cgi-bin/FormMail.pl method=post><INPUT name=subject type=hidden
value=\"NT FormMail Test\"> <!--xxx@xxxx.dk-->
  <INPUT name=recipient
type=hidden value=xxx@xxxx.dk>
 
  <INPUT name=return_link_title type=hidden
value=\"http://www.xxxx.dk\">
 
  <INPUT name=return_link_url type=hidden
value=http://www.xxxx.dk>
  <INPUT name=required type=hidden value=email>
<CENTER>
<H2>Send a test message with FormMail for 95/98/NT! </H2></CENTER>Your Name:
<INPUT name=realname size=45> <BR>Your E-mail Address: <INPUT name=email
size=45> <BR>Comments to the WebMaster: <BR><TEXTAREA cols=35 name=Comments rows=5></TEXTAREA>. <BR><BR><INPUT type=submit value=Submit> </FORM></BODY></HTML>

hjælper dette????
Avatar billede thomasledet Nybegynder
24. maj 2001 - 13:28 #4
hvordan ser din formmail.pl ud? smid lige koden herind...
Avatar billede k_s Nybegynder
24. maj 2001 - 13:31 #5
############################################################################
# FormMail for 95/98/NT          Version 1.6.2                              #
# Copyright 1996-1999          Ben Camp <benc@geocel.com>                #
# Created 05/04/99                Last Modified 08/01/99                    #
#                                                                            #
#          http://www.geocel.com/windmail/library/formmail.htm              #
#                                                                            #
#                YOU NEED TO SET UP YOUR SMTP SERVER BELOW                  #
#                                                                            #
# 08/01/99 - Some minor modifications were made to the script to allow      #
#            HTML forms to not have an \"email\" variable.  I suggest against  #
#            this, as it will set the senders email address to FormMail.    #
#            There is also a sample HTML form to use for testing, or to      #
#            modify to suit your needs.                                      #
#                                                                            #
# 05/04/99 - Having supported the FormMail for NT script for 3 years now,    #
#            it was obvious most problems were permissions and Web Server    #
#            related.  IIS has problems with conventional mailers (actually  #
#            it practices nonstandard CGI handling).  The Mailer has been    #
#            changed to DevMailer, which works perfectly under IIS.          #
#                                                                            #
# If you need DevMailer, you can download it at:                            #   
#                                                                            #
#                        http://www.geocel.com/devmailer/                    #
#                                                                            #
##############################################################################
# FormMail                        Version 1.6                                #
# Copyright 1995-1997 Matt Wright mattw@worldwidemart.com                    #
# Created 06/09/95                Last Modified 05/02/97                    #
# Matt\'s Script Archive, Inc.:    http://www.worldwidemart.com/scripts/      #
##############################################################################
# COPYRIGHT NOTICE                                                          #
# Copyright 1995-1997 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 #
##############################################################################

##############################################################################
# Define Variables                                                          #
#        Detailed Information Found In README File.                          #
#                                                                            #
# $smtp_server is name of your SMTP server.  If you do not have your own,    #
# you can put your ISP\'s smtp server.  This is where all the mail will be    #
# relayed.                                                                  #
#
# For Exchange and Lotus Notes / CC Mail servers this is the IP address to  #
# your SMTP gateway.

$smtp_server = \"mail.stampe.adsl.dk\";
$mailprog = \'Geocel.Mailer\';

# If you are running under Microsoft IIS, or any other server which uses    #
# NPH-CGI for Perl CGIs, uncomment the next line.                            #

$IIS_MODE = 1;

# @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 = (\'www.stampe.adsl.dk\',\'212.242.141.101\');

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

# Check Referring URL
&check_url;

# Retrieve Date
&get_date;

# Parse Form Contents
&parse_form;

# Check Required Fields
&check_required;

# Return HTML Page or Redirect User
&return_html;

# Send E-Mail
&send_mail;

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.          #
    $name =~ tr/+/ /;
    $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg;

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

    # If they try to include server side includes, erase them, so they
    # aren\'t a security risk if the html gets returned.  Another
    # security hole plugged up.
    $value =~ s/<!--(.|\\n)*-->//g;

    # 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} && $value) {
        $Form{$name} = \"$Form{$name}, $value\";
        }
        elsif ($value) {
        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\'});
}

sub check_required {

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

    if (!$Config{\'recipient\'}) {
    if (!defined(%Form)) { &error(\'bad_referer\') }
    else                { &error(\'no_recipient\') }
    }

    # 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}) {
        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 (!$Form{$require}) {
        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);

    # If redirect option is used, print the redirectional location header.  #
    if ($Config{\'redirect\'}) {

    if(defined(IIS_MODE))
    {
        print \"HTTP/1.0 302\\n\";
    }

    print \"Location: $Config{\'redirect\'}\\n\\n\";
    }

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

    # Print HTTP header and opening HTML tags.                          #

if(defined(IIS_MODE)) { print \"HTTP/1.0 200 OK\\n\"; }

    print \"Content-type: text/html\\n\\n\";
    print \"<html>\\n <head>\\n\";

    # Print out title of page                                            #
    if ($Config{\'title\'}) { print \"  <title>$Config{\'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>$Config{\'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 $Config{\'recipient\'} on \";
    print \"$date<p><hr size=1 width=75\\%><p>\\n\";

    # Sort alphabetically if specified:                                  #
    if ($Config{\'sort\'} eq \'alphabetic\') {
        foreach $field (sort keys %Form) {

        # If the field has a value or the print blank fields option  #
        # is turned on, print out the form field and value.          #
        if ($Config{\'print_blank_fields\'} || $Form{$field}) {
            print \"<b>$field:</b> $Form{$field}<p>\\n\";
        }
        }
    }

    # If a sort order is specified, sort the form fields based on that.  #
    elsif ($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) {
        if ($Config{\'print_blank_fields\'} || $Form{$sorted_field}) {
            print \"<b>$sorted_field:</b> $Form{$sorted_field}<p>\\n\";
        }
        }
    }

    # Otherwise, default to the order in which the fields were sent.    #
    else {

        # 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}) {
            print \"<b>$field:</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=\\\"$Config{\'return_link_url\'}\\\">$Config{\'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.worldwidemart.com/scripts/formmail.shtml\">FormMail</a> V1.6 &copy; 1995 -1997  Matt Wright<br>
A Free Product of <a href=\"http://www.worldwidemart.com/scripts/\">Matt\'s Script Archive, Inc.</a><br>
Windows 95/98/NT Port by <A HREF=\"http://www.geocel.com/\">Geocel International, Inc.</A>
</font></center>
    </body>
      </html>
(END HTML FOOTER)
    }
}

###
## If you have an existing FormMail script you want to convert you can copy this
## file or look at the code below as an example.
#

sub send_mail {

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

    use OLE;

    $DevMailer = CreateObject OLE \'Geocel.Mailer\';

    if(! $DevMailer)
    {
        print \"<P><CENTER><font color=\\\"red\\\" size=+2><b>Could not create DevMailer Object.</B></font> <BR><B>Look Below for Troubleshooting Help!</B></CENTER><P>\";
        print \"<B>Be Sure the following packages are installed:</B><BR><UL><LI><A HREF=\\\"http://www.activestate.com\\\">ActiveState Active Perl 5.x</A><BR><LI><A HREF=\\\"http://www.geocel.com/devmailer/\\\">Geocel DevMailer 1.x</A></UL><P>\";       
        print \"<B>Troubleshooting tips:</B><BR>\\n\";       
        print \"<UL><LI>This error is caused because Perl fails to load a software object.  This can be because DevMailer is not properly installed, or because this server is using an unsupported version of perl.\\n\";       
        print \"<LI>If you\'ve checked the above things, try moving DVMAILER.DLL to your CGI-BIN directory and register it there.  If your server has tight file security, the web server may not have permission to use DVMAILER.DLL in its own directory.\\n\";       
        print \"</UL>\\n\";
        return;
    }

    # Set Up SMTP Server
    $DevMailer->AddServer ($smtp_server,25);

    # Add Recipient
    $DevMailer->AddRecipient ($Config{\'recipient\'},\"\");

    # Set From: Name
    if ($Config{\'realname\'})
    {
        $DevMailer->{FromName}  = $Config{\'realname\'};
    }

        # Set From: Email Address
    # Changed 06/10/99 to prevent missing sender address

        if($Config{\'email\'})
    {
        $DevMailer->{FromAddress}  = \"$Config{\'email\'}\";
    } else
    {
        $DevMailer->{FromAddress}  = \"FormMail\";
    }

    # Check for Message Subject
    if ($Config{\'subject\'}) { $DevMailer->{Subject} = $Config{\'subject\'}; }
    else                    { $DevMailer->{Subject} = \"WWW Form Submission\"; }

    # Clear Body - Start Adding Data to Body

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

    if (@Print_Config) {
    foreach $print_config (@Print_Config) {
        if ($Config{$print_config}) {
            $dmbody = $dmbody . \"$print_config: $Config{$print_config}\\r\\n\\r\\n\";
        }
    }
    }

    # Sort alphabetically if specified:                                      #
    if ($Config{\'sort\'} eq \'alphabetic\') {
    foreach $field (sort keys %Form) {

        # If the field has a value or the print blank fields option      #
        # is turned on, print out the form field and value.              #
        if ($Config{\'print_blank_fields\'} || $Form{$field} ||
        $Form{$field} eq \'0\') {
        $dmbody = $dmbody . \"$field: $Form{$field}\\r\\n\\r\\n\";
        }
    }
    }

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

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

    # 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} ||
        $Form{$sorted_field} eq \'0\') {
        $dmbody = $dmbody . \"$sorted_field: $Form{$sorted_field}\\r\\n\\r\\n\";
        }
    }
    }

    # Otherwise, default to the order in which the fields were sent.        #
    else {

    # 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} ||
        $Form{$field} eq \'0\') {
        $dmbody = $dmbody . \"$field: $Form{$field}\\r\\n\\r\\n\";
        }
    }
    }

    $dmbody = $dmbody . \"-\" x 75 . \"\\r\\n\\r\\n\";

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

    $DevMailer->{Body} = $dmbody;
    $success = $DevMailer->Send();

    if($success) {
        # successfully sent
    }
    else {   
        if($DevMailer->{Queued})
        {
            print \"Message Queued\";
        } else
        {
            print \"<B>Could not send message, please check C:\\\\TEMP\\\\GEOCEL.LOG for more information.</B>\";
        }
    }
}

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-Z]{2,3}|[0-9]{1,3})(\\]?)$/) {

    # 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;
    }
}


sub GetTempFileName {

    $path = $_[0];
    $prefix = $_[1];

    # Get a random number
   
    # First, seed the random number generator
    srand;

    # Then get a random # for which a file name can be created
    $done = 0;
    $tempfile = \"\";
    while (!$done)
    {
        $randNum = int(rand(999999));
        $tempfile = \"$path\\\\$prefix$randNum.tmp\";
        open(TEMP, \"<$tempfile\") or $done = 1;
        close(TEMP);
    }
   
    return $tempfile;
}


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

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

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

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

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

    # Check for Body Text Color
    if ($Config{\'text_color\'}) { print \" text=\\\"$Config{\'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;

if(defined(IIS_MODE)) { print \"HTTP/1.0 200 OK\\n\"; }

        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.worldwidemart.com/scripts/formmail.shtml\">FormMail</a>
    resides at <tt>$ENV{\'HTTP_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 README 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.worldwidemart.com/scripts/formmail.shtml\">FormMail</a> V1.6 &copy; 1995 - 1997  Matt Wright<br>
      A Free Product of <a href=\"http://www.worldwidemart.com/scripts/\">Matt\'s Script Archive, Inc.</a>
    </font></center>
    </td></tr>
  </table>
  </center>
</body>
</html>
(END ERROR HTML)
    }
    else {

if(defined(IIS_MODE)) { print \"HTTP/1.0 200 OK\\n\"; }

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

<html>
<head>
  <title>FormMail v1.6</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 - 1997 Matt Wright<br>
    Version 1.6 - Released May 02, 1997<br>
    A Free Product of <a href=\"http://www.worldwidemart.com/scripts/\">Matt\'s Script Archive,
    Inc.</a><br>
    Windows 95/98/NT Port by <A HREF=\"http://www.geocel.com/\">Geocel International, Inc.</A></font></tt></th></tr>
  </table>
  </center>
</body>
</html>
(END ERROR HTML)
    }
    }

    elsif ($error eq \'request_method\') {

if(defined(IIS_MODE)) { print \"HTTP/1.0 200 OK\\n\"; }

    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.worldwidemart.com/scripts/formmail.shtml\">FormMail</a> V1.6 &copy; 1995 - 1997  Matt Wright<br>
      A Free Product of <a href=\"http://www.worldwidemart.com/scripts/\">Matt\'s Script Archive, Inc.</a><br>
    Windows 95/98/NT Port by <A HREF=\"http://www.geocel.com/\">Geocel International, Inc.</A>
    </font></center>
    </td></tr>
  </table>
  </center>
</body>
</html>
(END ERROR HTML)
    }

    elsif ($error eq \'no_recipient\') {

if(defined(IIS_MODE)) { print \"HTTP/1.0 200 OK\\n\"; }

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

<html>
<head>
  <title>Error: No Recipient</title>
</head>
<body bgcolor=#FFFFFF text=#000000>
  <center>
  <table border=0 width=600 bgcolor=#9C9C9C>
    <tr><th><font size=+2>Error: No Recipient</font></th></tr>
  </table>
  <table border=0 width=600 bgcolor=#CFCFCF>
    <tr><td>No Recipient was specified in the data sent to FormMail.  Please
    make sure you have filled in the \'recipient\' form field with an e-mail
    address.  More information on filling in recipient form fields can be
    found in the README file.<hr size=1>

    <center><font size=-1>
      <a href=\"http://www.worldwidemart.com/scripts/formmail.shtml\">FormMail</a> V1.6 &copy; 1995 - 1997  Matt Wright<br>
      A Free Product of <a href=\"http://www.worldwidemart.com/scripts/\">Matt\'s Script Archive, Inc.</a><br>
Windows 95/98/NT Port by <A HREF=\"http://www.geocel.com/\">Geocel International, 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: $Config{\'missing_fields_redirect\'}\\n\\n\";
    }
    else {
        foreach $missing_field (@error_fields) {
        $missing_field_list .= \"      <li>$missing_field\\n\";
        }

if(defined(IIS_MODE)) { print \"HTTP/1.0 200 OK\\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.worldwidemart.com/scripts/formmail.shtml\">FormMail</a> V1.6 &copy; 1995 - 1997  Matt Wright<br>
      A Free Product of <a href=\"http://www.worldwidemart.com/scripts/\">Matt\'s Script Archive, Inc.</a><br>
    Windows 95/98/NT Port by <A HREF=\"http://www.geocel.com/\">Geocel International, Inc.</A>
    </font></center>
    </td></tr>
  </table>
  </center>
</body>
</html>
(END ERROR HTML)
    }
    }
    exit;
}
Avatar billede thomasledet Nybegynder
24. maj 2001 - 13:36 #6
har du hentet det sendmail program, den skriver, den skal bruge? og har du installeret det ordentligt?

Avatar billede thomasledet Nybegynder
24. maj 2001 - 13:42 #7
ellers så prøv at erstattet din sendmail sub med

->

sub sendmail {

use Socket;

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

$to =~ s/[ \\t]+/, /g;
$fromaddr =~ s/.*<([^\\s]*?)>/$1/;
$fromaddr =~ s/^([^\\s]+).*/$1/;
$replyaddr =~ s/.*<([^\\s]*?)>/$1/;
$replyaddr =~ s/^([^\\s]+).*/$1/;
$message =~ s/^\\./\\.\\./gm;
$message =~ s/\\r\\n/\\n/g;
$message =~ s/\\n/\\r\\n/g;
$smtp =~ s/^\\s+//g;
$smtp =~ s/\\s+$//g;

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

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(S, AF_INET, SOCK_STREAM, $proto)) {
  return -2; }
if (!connect(S, pack(\'Sna4x8\', AF_INET, $port, $smtpaddr))) {
  return -3; }

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

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

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

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

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

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

print S \"To: $to\\r\\n\";
print S \"From: $from\\r\\n\";
print S \"Reply-to: $replyaddr\\r\\n\" if $replyaddr;
print S \"Subject: $subject\\r\\n\\r\\n\";
print S \"$message\";
print S \"\\r\\n.\\r\\n\";

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

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

close S;
return 1;
}

Avatar billede k_s Nybegynder
24. maj 2001 - 13:43 #8
dvmailer er installeret efter readme.txt.

readme.txt:

#
# DevMailer README.TXT
# version 1.0 (docver 1.1)
# This is a Limited Evaluation Demo Copy limited to 250 Emails.
# A full featured version is available at http://www.geocel.com
#
#  DevMailer 1.0 - The Universal SMTP Mailer
#  (c) 1998-1999, Geocel International


DevMailer is an ActiveX/COM object used to send internet email.  It can be used from
any program/language which supports ActiveX, COM, or OLE.  Some examples are Visual Basic,
Visual Basic for Applications (word, excel, access), Perl, C/C++, Delphi, etc...

The following files are included in this distribution:

DevMailer.HTM  -  DevMailer Documentation in HTML Format
DVMAILER.DLL  -  DevMailer DLL Component (program file)
JSTest.ASP    -  ASP JScript Example
VBTest.ASP    -  ASP VBScript Example
README.TXT    -  This File

Software Distribution: DevMailer has both a non-distribution license and redistribution license available. Please visit http://www.geocel.com for more information and pricing.

DevMailer Installation Instructions:

Installation

                            Install DevMailer in 5 easy steps:

1.Extract the DVMAILER.DLL file to a temporary path. If you do not have a copy of
DevMailer, you can obtain the Evaluation Demo here.
2.Copy the DVMAILER.DLL file to somewhere on your local hard drive. If you do not have a
place dedicated to storing objects you can place it in C:\\WINNT\\SYSTEM32 (Windows NT)
or C:\\WINDOWS\\SYSTEM (Windows 95/98).
3.Open a MS-DOS command prompt and CD to the directory where you copied
DVMAILER.DLL.
4.Run the following command:

REGSVR32.EXE DVMAILER.DLL

5.If the previous command returns an error, make sure that DVMAILER.DLL exists in the
current directory. If running REGSVR32.EXE from another directory, you must specify the full
path to DVMAILER.DLL.
Note: On Windows95 and Windows98, REGSVR32.EXE is located in
C:\\WINDOWS\\SYSTEM32

DevMailer is now installed!

-----------------------------------------------------------------                                                 
Also, Installation Instructions are located at:
http://www.geocel.com/devmailer/Installation.htm
-----------------------------------------------------------------     

Uninstallation

1.Go to the directory DVMAILER.DLL is in.
2.Run the following command:
                            REGSVR32.EXE /U DVMAILER.DLL
3.Delete DVMAILER.DLL. (note: you may need to close apps which used it recently)

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

Additional Code Examples can be found at:
               
        http://www.geocel.com/devmailer/examples.htm

DevMailer License and Purchasing Information at:

        http://www.geocel.com/devmailer/



Sould you have any installation questions, please send
an email to our Technical Support at
support@geocel.com.
Avatar billede thomasledet Nybegynder
24. maj 2001 - 13:55 #9
jeg må indrømme, at jeg ikke er super vant til perl på nt... men den socket-kode jeg gav dig virker på alle styresystemer...

i den version jeg har skrevet dér, er den dog snotdum... den fatter ikke mimes eller filer... dvs at du kun kan sende rene tekst baserede emails med den...

men den virker... og socket er altid installeret...
Avatar billede k_s Nybegynder
24. maj 2001 - 14:06 #10
socket-kode??? hvad gør jeg ved den???
Avatar billede thomasledet Nybegynder
24. maj 2001 - 14:09 #11
erstatter din send_mail sub i den kode, du allerede har skrevet.....

men spørgsmålet er stadigvæk, om det er din sendmail, der er problemet... måske er problemet noget helt andet, men det er vel værd at prøve...
Avatar billede k_s Nybegynder
24. maj 2001 - 14:26 #12
kan jeg ikke få dig til det??????
Avatar billede thomasledet Nybegynder
24. maj 2001 - 15:11 #13
hvad vil du helt præcist have formaileren til... det er vist nemmere at skrive en ny, end at rette på det rod, den kære Matt har lavet...

den skal kunne
1) modtage input fra en html-form
2) sende inputtet i en email
3) udskrive inputtet til klientens browser og sige at det er sendt

eller hvad?
Avatar billede k_s Nybegynder
24. maj 2001 - 15:17 #14
ja og

4) alle fælderne skal udfyldes før den kan sendes, elles fejl side.
Avatar billede thomasledet Nybegynder
24. maj 2001 - 15:18 #15
jaja... selvfølgelig....

jeg kan hurtigt skrive et sådant script... der skal nok bare lige mides et par points mere i kassen...:)
Avatar billede k_s Nybegynder
24. maj 2001 - 15:22 #16
og hvor mange flere points skal der til???
Avatar billede thomasledet Nybegynder
24. maj 2001 - 15:31 #17
points er ikke vigtige... de giver ikke mad på bordet... men de er en anerkendelse af en hjælp givet... hvad synes du selv, det er værd?
Avatar billede k_s Nybegynder
24. maj 2001 - 15:33 #18
jeg putter 60 points mere i.
Avatar billede thomasledet Nybegynder
24. maj 2001 - 15:35 #19
heh...:) så går jeg i gang med det samme...:)
Avatar billede k_s Nybegynder
24. maj 2001 - 15:37 #20
og jeg håber det kommer til at virke
Avatar billede thomasledet Nybegynder
24. maj 2001 - 16:25 #21
har desværre ikke lige adgang til en server at teste det på herfra.... men prøv at køre det

-->
#!/usr/bin/perl

use Socket;

read(STDIN, $theinput, $ENV{\'CONTENT_LENGTH\'});
%userinput=split(/[&=]/, $theinput);
$remoteaddress=decode($ENV{REMOTE_ADDR});
$remotehost=decode(scalar gethostbyaddr pack(\"C4\", split(/\\./, $ENV{REMOTE_ADDR})), 2);
$loadpage=decode($ENV{\'HTTP_REFERER\'});
$smtp=\'mail.dinserver.noget\';

@required(\'to\',\'subject\',\'message\');
@validpages=(\'http://www.dinserver.dk\',\'http://ipadresse\',\'http://www.enandenserver.dk\');

$page=0;
foreach (@validpages)
{
    if ($loadpage eq $_) {$page++;}
}


if (checkrequired())
{
    print \"Content-type: text/html\\n\\n\";
    print qq½<HTML><HEAD><TITLE>FEJL!</TITLE></HEAD><BODY>½;
    foreach (@_)
    {
        print \"$_ mangler!<BR>\\n\";
    }
    print \'</BODY></HTML>\';
}
elsif ($page != 0)
{
    print \"Content-type: text/html\\n\\n\";
    print qq½<HTML><HEAD><TITLE>FEJL!</TITLE></HEAD><BODY>Du kan ikke sende beskeder fra $loadpage</BODY></HTML>½;
   
}
else
{
    if

(sendmail(decode($userinput{from}),decode($userinput{reply}),decode($userinput{to}),$smtp,decode($userinput{subject}),decode(

$userinput{message})))
    {
        print \"Content-type: text/html\\n\\n\";
        print \"<HTML><HEAD><TITLE>SENDT!</TITLE></HEAD><BODY>\";
        printf \"Din besked fra %s til %s blev sendt!<BR>\\n\",$userinput{from},$userinput{to};
        printf \"Beskeden var:<BR>%s\",$userinput{message};
        print \'</BODY></HTML>\';
    }
}

sub sendmail
{
    my ($from, $reply, $to, $smtp, $subject, $message) = @_;
    my ($fromaddr) = $from;
    my ($replyaddr) = $reply;
    $to =~ s/[ \\t]+/, /g;
    $fromaddr =~ s/.*<([^\\s]*?)>/$1/;
    $replyaddr =~ s/.*<([^\\s]*?)>/$1/;
    $replyaddr =~ s/^([^\\s]+).*/$1/;
    $message =~ s/^\\./\\.\\./gm;
    $message =~ s/\\r\\n/\\n/g;
    $message =~ s/\\n/\\r\\n/g;
    $smtp =~ s/^\\s+//g;
    $smtp =~ s/\\s+$//g;
    if (!$to) { return -8; }
    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];
    my @days=(\'Sun\',\'Mon\',\'Tue\',\'Wed\',\'Thu\',\'Fri\',\'Sat\');
    my @months=(\'Jan\',\'Feb\',\'Mar\',\'April\',\'May\',\'Jun\',\'Jul\',\'Aug\',\'Sep\',\'Oct\',\'Nov\',\'Dec\');
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
    if ($hour<10){$hour=\"0$hour\";}if ($min<10){$min=\"0$min\";}
    if ($sec<10){$sec=\"0$sec\";}
    my ($time)=qq½$days[$wday], $mday $months[$mon] $year $hour:$min:$sec +0100½;
    if (!defined($smtpaddr)){return -1;}
    if (!socket(S, AF_INET, SOCK_STREAM, $proto)){return -2;}
    if (!connect(S, pack(\'Sna4x8\', AF_INET, $port, $smtpaddr))){return -3;}
    my($oldfh) = select(S); $| = 1; select($oldfh);
    $_=<S>;if (/^[45]/){close S;return -4;}
    print S \"helo localhost\\r\\n\";
    $_=<S>;if (/^[45]/){close S; return -5;}
    print S \"mail from: <$fromaddr>\\r\\n\";
    $_ = <S>; if (/^[45]/) { close S; return -5; }

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

    print S \"data\\r\\n\";$_=<S>;if (/^[45]/){close S;return -5;}
    print S \"To: $to\\r\\n\";
    print S \"From: $from\\r\\n\";
    print S \"Reply-to: $replyaddr\\r\\n\" if $replyaddr;
    print S \"Subject: $subject\\r\\n\";
    print S \"Date: $time\\r\\n\";
    print S \"MIME-Version: 1.0\\r\\n\";
    print S \"X-Remote-Agent: $useragent\\r\\n\";
    print S \"X-Remote-ID: $remotehost \\[$remoteaddress\\]\\r\\n\";
    print S \"X-Server-URL: $loadpage\\r\\n\";
    print S \"\\r\\n\\r\\n\";
    print S $message;
    print S \"\\r\\n.\\r\\n\";
    $_=<S>; if (/^[45]/) { close S; return -7; }
    print S \"quit\\r\\n\";
    $_=<S>;
    close S;
    return 1;
}

sub checkrequired
{
    my @error=();
    foreach (@required)
    {
        if (!defined($userinput{$_}) {push(@error,$_);}
    }
    return @error;
}

sub decode
{
    shift() if ref($_[0]);
    my $value=shift;
    return undef unless defined($value);
    $value=~tr/+/ /;
    $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"c\",hex($1))/eg;
    $value =~ s/~!/ ~!/g;
    return $value;
}
Avatar billede thomasledet Nybegynder
24. maj 2001 - 16:25 #22
hvis det ikke kører, så skriv lige eventuelle fejl...
Avatar billede thomasledet Nybegynder
24. maj 2001 - 16:33 #23
derudover vil du sikkert også gerne lave lidt om på html-outputtet... det er ikke så fancy...
Avatar billede k_s Nybegynder
24. maj 2001 - 16:38 #24
html-outputtet. hvad er det :)
Avatar billede k_s Nybegynder
24. maj 2001 - 17:02 #25
ja tak
Avatar billede thomasledet Nybegynder
24. maj 2001 - 17:11 #26
virker det?
Avatar billede k_s Nybegynder
24. maj 2001 - 17:16 #27
samme fejl som da jeg startet.

The page cannot be displayed
The page you are looking for cannot be displayed because the page address is incorrect. 

HTTP 405 - Resource not allowed
Internet Information Services
Avatar billede thomasledet Nybegynder
24. maj 2001 - 17:37 #28
aahh... du har ikke sat script execution rettigheder på dit dir...:)

gå ind i i Internet Services Manager og vælg properties for dig cgi-bin dir... der skal du have valgt de rigtige execution rettigheder..
Avatar billede k_s Nybegynder
24. maj 2001 - 19:42 #29
og hvad er de rigtige execution rettigheder.
Avatar billede thomasledet Nybegynder
25. maj 2001 - 16:41 #30
har ikke lige IIS installeret... men der skal være script execution slået til...
Avatar billede k_s Nybegynder
25. maj 2001 - 23:50 #31
der skulle det være :)
Avatar billede thomasledet Nybegynder
26. maj 2001 - 12:33 #32
hmmm... mærkeligt...
Avatar billede k_s Nybegynder
03. juni 2001 - 11:54 #33
nå det kommer nok ikke til at virke

Men tak for hjælpen
Avatar billede k_s Nybegynder
03. juni 2001 - 11:54 #34
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester