Perl form-mail скрипт, который не работает - PullRequest
0 голосов
/ 25 сентября 2011

В школе мне дали задание создать бланк комментариев на моем сайте.Я получил все, что, как я думал, будет трудным делом, но теперь столкнулся с серьезным камнем преткновения.Мне дали Perl-скрипт под названием form-mail2 для размещения в cgi-bin моего веб-сервера, и я сделал это, но когда я нажимаю на кнопку отправить в моей форме, я получаю следующее:быть связанным со сценарием, поэтому я хотел бы обратиться к вам, чтобы помочь мне.Всего мне дали сценарий, так что я думаю, что он не настроен правильно, но я не представляю, как правильно его настроить.Вот сценарий:

#!/usr/local/bin/perl

# ------------------------------------------------------------
# Form-mail.pl, by Reuven M. Lerner (reuven@the-tech.mit.edu).
#
# Last updated: March 14, 1994
#
# Form-mail provides a mechanism by which users of a World-
# Wide Web browser may submit comments to the webmasters
# (or anyone else) at a site.  It should be compatible with
# any CGI-compatible HTTP server.
# 
# Please read the README file that came with this distribution
# for further details.
# ------------------------------------------------------------

# ------------------------------------------------------------
# This package is Copyright 1994 by The Tech. 

# Form-mail is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.

# Form-mail is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with Form-mail; see the file COPYING.  If not, write to the Free
# Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
# ------------------------------------------------------------

# Define fairly-constants

# This should match the mail program on your system.
$mailprog = '/usr/lib/sendmail';

# This should be set to the username or alias that runs your
# WWW server.

$recipient = 'salvador.voli@gmail.com' 


if ($recipient eq  "\@csprofessor.com") { 
    $recipient = $ENV{'SERVER_ADMIN'};
}

# Print out a content-type for HTTP/1.0 compatibility
print "Content-type: text/html\n\n";

# Get the input
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

# Split the name-value pairs
@pairs = split(/&/, $buffer);

foreach $pair (@pairs)
{
    ($name, $value) = split(/=/, $pair);

    # Un-Webify plus signs and %-encoding
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    # Stop people from using subshells to execute commands
    # Not a big deal when using sendmail, but very important
    # when using UCB mail (aka mailx).
    # $value =~ s/~!/ ~!/g; 

    # Uncomment for debugging purposes
    # print "Setting $name to $value<P>";

    $FORM{$name} = $value;
}

# If the comments are blank, then give a "blank form" response

unless ($FORM{'realname'}) { &blank_response("name");    }
unless ($FORM{'email'}   ) { &blank_response("email");   }   
unless ($FORM{'message'} ) { &blank_response("message"); }
unless ($FORM{'rating'}  ) { &blank_response("rating");  }

# Print a title and initial heading
print "<html>\n";
print "<Head><Title>Thank you</Title></Head>";
print "<Body><H1>Thank you</H1>";
print "<p>Thank you for sending your comments!<br>";
print "</body></html>";

# Now send mail to $recipient

open (MAIL, "|$mailprog $recipient") || die "Can't open $mailprog!\n";
print MAIL "To: sgifford\@csprofessor.com\n";
#print MAIL "To: $recipient\n";
print MAIL "From: $FORM{'email'} ($FORM{'realname'})\n";
print MAIL "Reply-to: $FORM{'email'} ($FORM{'realname'})\n";
print MAIL "Subject: Web Site Comments\n\n";
print MAIL "------------------------------------------------------------\n";
print MAIL "$FORM{'email'} ($FORM{'realname'}) Stopped by\n";
print MAIL "Phone: $FORM{'phone'}\n";
print MAIL "Birthday: $FORM{'bday'}\n";
print MAIL "------------------------------------------------------------\n";
print MAIL "And this is what $FORM{'realname'} had to say:\n\n";
print MAIL "$FORM{'message'}";
print MAIL "\n------------------------------------------------------------\n";
print MAIL "Web Site Rating: $FORM{'rating'}";
print MAIL "\n------------------------------------------------------------\n";
print MAIL "Server protocol: $ENV{'SERVER_PROTOCOL'}\n";
print MAIL "Remote host: $ENV{'REMOTE_HOST'}\n";
print MAIL "Remote IP address: $ENV{'REMOTE_ADDR'}\n";
print MAIL  "------------------------------------------------------------\n";
close (MAIL);

# Make the person feel good for writing to us

# ------------------------------------------------------------
# subroutine blank_response
sub blank_response
{

    print "<html>\n";
    print "<Head><Title>Incomplete Comment Form</Title></Head>";
    print "<Body><H1>Incomplete Comment Form</H1>";
    print "<p>";
    print "The $_[0] field appears to be blank! ";
    print "Please finish filling out the form and re-submit your comments. ";
    print "</body></html>";
    exit;
}

А вот часть формы моего кода:

<form name="usercomments" action="/cgi-bin/form-mail2.pl" method="post" onsubmit="return finalCheck()">


Name: <input type="text" name="realname" onchange= "nameCheck()" value="" /><br />

email: <input type="text" name="email" onchange = "emailCheck()" value="" /><br />

phone: <input type="text" name="phone" onchange = "phoneCheck()" value="" /><br />

birthday: <input type="text" name="bday" onchange = "birthdayCheck()" value="" /><br />


How would you describe your experience today? <br/ >

  <input type="radio" name="rating" value="Awesome" checked="checked" /> Awesome<br />
  <input type="radio" name="rating" value="Mediocre"  /> Mediocre<br />
  <input type="radio" name="rating" value="Terrible"  /> Terrible<br />

Comments: <br />
<textarea name="message"  rows="5" cols = "100" > 
</textarea><br />

<input type="submit" value="Submit" />
</form>

Любые предложения, которые вы могли бы дать, были бы очень признательны.

Ответы [ 3 ]

4 голосов
/ 26 сентября 2011

Возможно, «последнее обновление 1994 года» должно было быть немного красным флагом?

Если вы собираетесь отправлять электронную почту в Perl, вам следует начать с сценария NMS FormMail , который хорошо написан и прокомментирован и почти наверняка намного более безопасен, чем ваш скрипт.

Но да, посмотрите журналы ошибок вашего сервера.

3 голосов
/ 20 апреля 2016

Я написал эту form-mail программу еще в 1993 году. (Я несколько обновил ее в течение следующего года, как указывают авторские права.)

Не следует использовать ее на любом современном веб-сервере.Это было более чем достаточно в то время, когда Интернет был молодым, и нам не нужно было (слишком много) беспокоиться о безопасности.И до того, как был написан модуль CGI.И так далее.

Никто не должен больше использовать это.Существуют десятки и, возможно, сотни способов отправки электронной почты с веб-сервера без проблем с безопасностью, которые есть у form-mail.

2 голосов
/ 25 сентября 2011

Поскольку вы увидели эту часть сообщения:

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

Вы должны спросить: "Как мне увидеть содержимое журнала ошибок моего сервера?" : -)

Краткий ответ: «Это зависит от того, как настроен ваш конкретный веб-сервер».

т. Вам следует задать этот вопрос своему веб-мастеру / Интернет-провайдеру.

Для получения дополнительной информации, есть статья в журнале (написанная тем же автором, что и ваш код):

Learning to use the httpd error log to debug CGI programs
http://www.linuxjournal.com/article/2055

Вы можете легко организовать отображение этих сообщений в браузере, как описано в ответе на ваш часто задаваемый вопрос:

http://perldoc.perl.org/perlfaq9.html#My-CGI-script-runs-from-the-command-line-but-not-the-browser.-%28500-Server-Error%29
...