Скрипт срабатывает, а почты нет.
#!/usr/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 -t";
$mailto="logo17\@yandex.ru";
$from="logo17\@yandex.ru";
open (MAIL, "|$mailprog $mailto");
print MAIL "From: $from\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: Otpravka zakaza.\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"
print MAIL"
print MAIL"
print MAIL"
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 почта не приходит. Вообще никакая.
Подскажите в чем тут может быть дело.
А там точно деман сенд меила вертится.. ?
В смысле есть лли на сервере программа сендмайл? Есть.
В смысле есть лли на сервере программа сендмайл? Есть.
Лучше у админа спроси :) помоему должен именно демон висеть а не просто прога стоять.
попробуй вмето
open (MAIL, "|$mailprog $mailto")
написать open (MAIL, "|$mailprog")
или print open (MAIL, "|$mailprog");
тогда сможеш посмотреть(наверное) что сервак возращает
Вот исправленный скрипт (укороченный):
#!/usr/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 -t";
$mailto="logo17\@yandex\.ru";
$from="logo17\@yandex\.ru";
open (MAIL, "|$mailprog");
print MAIL "From: $from\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: Otpravka zakaza\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" </body>\n";
print MAIL"</html>\n";
close(MAIL);
}
#####_Выводим благодарственное сообщение_#####
sub page
{
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "Спасибо!!!</html>\n";
}
Если отправляеш POST переправь на GET в урле можно будет посмотреть какие поля передаются.
Может ты пытаешся GET отправить большой текст тогда переправь на POST :).
А вообще пользуйся CGI люди писали сторались :)
use CGI;
$form=new CGI;
sub get_form
{
foreach $key ($form->param())
{
$FORM{$key}=$form->param($key);
}
}
А вообще данные отправляются со страници?
Если отправляеш POST переправь на GET в урле можно будет посмотреть какие поля передаются.
Может ты пытаешся GET отправить большой текст тогда переправь на POST :).
А вообще пользуйся CGI люди писали сторались :)
use CGI;
$form=new CGI;
sub get_form
{
foreach $key ($form->param())
{
$FORM{$key}=$form->param($key);
}
}
1.Отправляются только с одного поля.
2.Спасибо я попобую c POST на GET.
3.А это что скрипт такоЙ? И ничего добавлять не надо? Путь к Pepl там, мыло и т.д.?
Спасибо.
Я посоветовал использовать GET только чтобы убедится что ВСЕ поля передаются скрипту это видно сразу в адресной строке что то типа
.../mail.cgi?kol1=бла-бла&col2=тру-тру... и так далее. Может ты гтето в форме ошибся и передается ТОЛЬКО 1 поле
а на счет скрипта:
#!/usr/bin/perl
use CGI;
$form=new CGI;
&get_form();
&send_email;
&page;
sub get_form
{
foreach $key ($form->param())
{
$FORM{$key}=$form->param($key);
}
}
ну а дальше все как у тебя
1.Отправляются только с одного поля.
2.Спасибо я попобую c POST на GET.
3.А это что скрипт такоЙ? И ничего добавлять не надо? Путь к Pepl там, мыло и т.д.?
Спасибо.
По поводу 2. при разборе параметров аля
read(STDIN, $buffer, $ENV{ 'CONTENT_LENGTH' } );
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
хещ $FORM{$name} = $value; будет состоять из пустых имен и значений.
По поводу 3. perldoc CGI.
Я установил на своём компе полный комплект сервера: Apache, Perl, Sendmail и другие.
В качестве теста запустил файл с след. содержанием:
#!perl
print "Content-type: text/html\r\n\r\n";
$sendmail = 'd:/server/sendmail/sendmail.exe';
$address = 'admin@127.0.0.1';
if (-f $sendmail)
{
open (MAIL, "|$sendmail -t");
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-Type: text/plain; charset=windows-1251\n";
print MAIL "To: admin <$address>\n";
print MAIL "From: Проверка почтового сервера <$address>\n";
print MAIL "Subject: Проверка программы SendMail\n";
print MAIL "Текст тестового письма";
close (MAIL);
print "SendMail программа найдена :)";
}
else {print "SendMail программа не найдена :(";}
на экране высветилось оптимистическое: SendMail программа найдена :). Но я так и не понял, а куды ушло тестовое письмо. Я поменял в файле строку
print MAIL "To: admin <$address>\n";
на
print MAIL "To: myname\@myserver\n";
Скрипт опять таки хорошо сработал, даже Нортон зафиксировал отправление почты, однако письмо на указанный адрес не пришёл.
С чем это может быть связано?
я не уверен но помоему в настройках гдето указывается нормальный почтовый сервер через каторый и происходит отправка почты