Вопрос на который никто не отвечает.
Для моего сайта нужен cgi-скрипт - сценарий, для отправки сообщений с полей формы без вызова почтовой программы. На всех форумах гробовое молчание. Наверно прийдется из-за одного скрипта изучать весь Perl. Скинте хотябы примерно что нибудь. Спасибо.
енто реализовываеться не сложно.... на пхп при помощи функции mail а на перле должно быть что то подобное.... поищи в статьях.....
# Perl-based Mail Tool
#
# Copyright 1998 Tod Sambar
# All rights reserved.
#
# Arbitrary Mail Form Data can be pre-pended to the mail
# message by adding input parameters that begin with the
# characters: FD
#
#
# Only allow localhost to dump environment variables
# (ONLY remove after reading the syshelp/security.htm documentation)
#
$host_test = $ENV{'REMOTE_ADDR'};
if (!($host_test eq '127.0.0.1'))
{
print "Only localhost is allowed to use this script!\n";
exit(1);
}
#
# PARSE THE CGI FORM
#
# Buffer the POST content
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Process the name=value argument pairs
my $data;
my $pair;
my $name;
my $value;
my @args = split(/&/, $buffer);
$data = '';
foreach $pair (@args)
{
($name, $value) = split(/=/, $pair);
# Unescape the argument value
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# Any fields starting with FD (form-data) are prepended
if ($name =~ /^FD/)
{
$name =~ s/FD//;
$name =~ tr/+/ /;
$data .= $name." : ".$value."\n";
}
else
{
# Save the name=value pair for use below.
$FORM{$name} = $value;
}
}
#
# VERIFY THE FORM DATA
#
$server = $FORM{'server'};
$from = $FORM{'from'};
$to = $FORM{'recipient'};
if (!($server) || !($from) || !($to))
{
print "<HTML><TITLE>Missing fields</TITLE><BODY>\n";
print "Missing one of the following required arguments:
\n";
print "server from to\n";
print "</BODY></HTML>\n";
exit(1);
}
$subject = $FORM{'subject'};
if (!($subject))
{
$subject = "none";
}
$bodyfile = '';
$body = $FORM{'body'};
if ($data)
{
$body = $data."\n\n".$body;
}
$attach = $FORM{'attach'};
#
# CLOSE SECURITY PROBLEMS.
#
if (($server =~ /[;><&\*'\|]/ ) ||
($from =~ /[;><&\*'\|]/ ) ||
($subject =~ /[;><&\*'\|]/ ) ||
($attach =~ /[;><&\*'\|]/ ) ||
($to =~ /[;><&\*'\|]/ ))
{
print "<HTML><TITLE>Invalid fields</TITLE><BODY>\n";
print "One or more the following fields have invalid characters:
\n";
print "server from to subject attach\n";
print "</BODY></HTML>\n";
exit(1);
}
if ($attach =~ /([^\.]+)\//)
{
print "<HTML><TITLE>Invalid attachment path</TITLE><BODY>\n";
print "An invalid attachment path was specified.
\n";
print "</BODY></HTML>\n";
exit(1);
}
#
# Prepare the BODY of the message
#
if ($body)
{
# Write the body to a temporary file.
do {
$bodyfile = int(rand(99999999))."mit";
} until !(-e $bodyfile);
open(FILE, ">$bodyfile") || exit(1);
print FILE $body;
close FILE;
}
# Fixup any quote characters...
$server =~ s/"/\\"/g;
$from =~ s/"/\\"/g;
$to =~ s/"/\\"/g;
$subject =~ s/"/\\"/g;
$attach =~ s/"/\\"/g;
#
# BUILD THE MAIL COMMAND
#
# Syntax: mailit <server> <from> <to> <subject> [<body-file> [<attach1>]]
#
$commandline = "..\\bin\\mailit.exe ";
$commandline .= " \"$server\"";
$commandline .= " \"$from\"";
$commandline .= " \"$to\"";
$commandline .= " \"$subject\"";
$commandline .= " $bodyfile" if $bodyfile;
$commandline .= " $attach" if $attach;
#
# EXECUTE THE MAILIT COMMAND
#
system($commandline);
$result = $?;
# Remove the body file.
if ($bodyfile)
{
unlink($bodyfile);
}
# Test the result...
if ($result != 0)
{
print "\nMailIt Failed [$result].\n";
print "Command: ".$commandline;
exit(1);
}
#
# DONE
#
print "MailIt Succeeded.\n";
exit(0);
В чем трабл ;)=,
Разбираешь query_string и записываеьш хочешь в файл, хочешь в бд.
Ну если не нравиться программить самому то найти сырцы вообще не сложно. ;)=
$commandline = "..\\bin\\mailit.exe "; - это еще что???
#!/usr/local/bin/perl
&get_form();
&send_email;
&page;
#####_Получаем данные из формы и обрабатываем_#####
sub get_form()
{
read(STDIN, $buffer, $ENV{ 'CONTENT_LENGTH' } );
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([0-9A-H]{2})/pack('C', hex($1))/eg;
$value =~ s///g;
$value =~ s/<([^>]|\n)*>//g;
$FORM{$name} = $value;
}
}
#####_Отсылаем данные на e-mail_#####
sub send_email
{
$mailprog="/usr/sbin/sendmail -i";
$mailto="твой\@е-mail";
$from="от кого\@email.ru";
open (MAIL, "|$mailprog $mailto");
print MAIL "From: $from\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: тема.\n";
print MAIL"Content-type:text/html\n";
print MAIL"\n";
print MAIL"<html>\n";
print MAIL" <body>\n";
print MAIL"
print MAIL"
print MAIL"
print MAIL"
print MAIL"
print MAIL" </body>\n";
print MAIL"</html>\n";
close(MAIL);
}
#####_Выводим благодарственное сообщение_#####
sub page
{
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "Спасибо!!!</html>\n";
}
Все, можно, конечно, расширить, сделать проверку данный, но это уже мелочи.
Итак, тебе на e-mail придет письмо где будут перечислены в столбик значения полей формы!
Цитата:
Originally posted by ReDrum
$commandline = "..\\bin\\mailit.exe "; - это еще что???
$commandline = "..\\bin\\mailit.exe "; - это еще что???
mailit.exe, то же что и sendmail в *nix'e..
Используться на Web-Server'e Sambar(sambar.com).......дистрибутив включает готовые примеры скриптов...........
<?
function sendmail($from_name,$from_address,$to_address,$subject,$message,$additional_headers='')
{
$MSG = "Return-Path: <$from_address>\n";
$MSG .= "To: $to_address\n";
$from = $from_address;
if (!empty($from_name))
$from = "$from_name <$from>";
$MSG .= "From: $from\n";
$ZONE = Date('Z');
$SIGN = '+';
if ($ZONE > 0) $SIGN = '-';
$ZONE = abs($ZONE);
$MSG .= 'Date: '.Date('D, d M Y H:i:s ').$SIGN.sprintf('%02d%02d',floor($ZONE/ 3600),floor(($ZONE%3600)/60))."\n";
if (!empty($subject))
$MSG .= "Subject: $subject\n";
$MSG .= "$additional_headers\n";
$MSG .= "\n";
$MSG .= $message;
$fp = popen('/usr/lib/sendmail -t','w');
$num = fputs($fp,$MSG);
pclose($fp);
return $num;
}
?>
ну или вот проше тоже на пхп
<?php
$to = "zatch@mail.com";
$extra = "From: $email\r\nReply-To: $email\r\n";
$mess = "This is from: ".$name."(".$REMOTE_ADDR.")\n\n".$message;
//mail это и есть самая нужная команда в нашем
//деле!
mail ($to, $subject, $mess, $extra);
echo("Your mail has been sent.
<a href=\"".$HTTP_REFERER."\">go back.</a>\n");
?>
Вот спасибо, так спасибо. Будем разбираться.
Цитата:
Originally posted by Oleg32
Вот спасибо, так спасибо. Будем разбираться.
Вот спасибо, так спасибо. Будем разбираться.
Если ты на Perl'e, могу помочь :)
[email]tavix@ngs.ru[/email]