Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > E-MAIL


Автор: r 6.11.2005, 00:31
Не бейте ногами, но вопрос такой, как мне в скрипте вызвать функцию написанную на PHP.
Дело в том что на хостинге у меня не работает скрипт отсылки почты. В логах такая вот фигня:

################################################
[Sun Nov 6 00:14:28 2005] [error] [client 217.118.66.232] File does not exist: /home/dezz/www/site/public_html/favicon.ico
################################################

И куда только не обращался, там все советуют фун. mail() для PHP.
Был-бы рад если-бы кто подсказал мою ошибку, вот скрипт:
Код

#!/usr/bin/perl -w
use strict;
use CGI qw/:standard/;
my $cgi = new CGI;
my $from = '[email protected]';
my $to = '[email protected]';
my $subject = 'test.';
my $mess = '''test.;
my $bcopy = '';
my $mailprog = '/usr/sbin/sendmail';
print $cgi -> header( -charset => 'Windows-1251' );
print "Поехали!!!";
 open (MAIL, "|$mailprog -t -oi -odq") || die "ERROR $mailprog";
 print MAIL "From: $from\n";
 print MAIL "To: $to\n";
   if ($bcopy ne ""){
     print MAIL "BCC: $bcopy\n";
   }
  print MAIL "Subject: $subject\n";
  print MAIL "Content-Type: text\/plain\n";
  print MAIL "\tCharset=\"windows-1251\"\n";
   print MAIL "\n";
  print MAIL "$mess\n";
   close(MAIL);         



А то так не хочется с PHP заморачиваться. Спасибо.

Автор: r 6.11.2005, 00:33
Извиняюсь восьмая строка вот так:
Код

my $mess = 'test.';



Автор: sharq 6.11.2005, 16:19
r
Цитата(r @ 6.11.2005, 01:31)
как мне в скрипте вызвать функцию написанную на PHP.

Вызвать php-функцию в perl-скрипте невозможно. smile Можно выполнить php-скрипт, который вызывает эту функцию.
Вот, например:
Код

<?
 echo "Hello\n";
?>


Код

my $result = `php test.php`;



Цитата(r @ 6.11.2005, 01:31)
В логах такая вот фигня:
################################################
[Sun Nov 6 00:14:28 2005] [error] [client 217.118.66.232] File does not exist: /home/dezz/www/site/public_html/favicon.ico
################################################

Поверь, не из-за этого не работает скрипт отправки почты. smile
Это сообщение указывает, что у тебя нет иконки на сайт - favicon.ico

Цитата(r @ 6.11.2005, 01:31)
И куда только не обращался, там все советуют фун. mail() для PHP.

А зачем тебе php, если все можно сделать на perl (почти все smile).


Цитата(r @ 6.11.2005, 01:31)
Был-бы рад если-бы кто подсказал мою ошибку

Да вроде все нормально. Приведи лог ошибки работы скрипта, а не ошибку отсутствия фавикона. smile

Для отправки писем можешь использовать готовые модули, чтобы не возиться на прямую с sendmail'ом, их очень много на CPAN. Вот некоторые - Mail::Sendmail, MIME::Lite и др.

smile

Автор: r 13.11.2005, 19:36
Привет sharq, мне админ сказал что-бы отправить письмо нужна smtp авторизация. Посмотрел Mail::Sendmail, там ее почему-то не обнаружил. Попробую конечно, если такой модуль там стоит. В логах ошибок нет кроме приведенной выше. Спасибо.

Автор: sharq 14.11.2005, 11:38
r т.е. тебе нужно отправлять письмо не через sendmail, а через сокеты!
В Mail::Sedmail - есть возможность отправлять письма через сокеты!
Код

my %mail = (
            To      => $email,
            From    => $from,
            Subject => "=\?cp1251\?Q\?$subject\?=",
            ...
);

$mail{Smtp} = "smtp.mail.ru"; # например или через другой smtp-сервер


Посмотри еще модуль Net::SMTP - там на прямую.

Хотя самый удобный вариант отправки писем и писем с аттачем - use MIME::Lite.

smile

Автор: r 14.11.2005, 21:37
Привет sharq, на хосте нет такого модуля. Вот админу написал, всяко разно. А в энтом модуле как раз вот этот кусок кода, и усе. А ошибка в логах такая:

Код

Can't locate Mail/Sendmail.pm in @INC (@INC contains: /usr/local/lib/perl5/site_perl/5.8.6/mach /usr/local/lib/perl5/site_perl/5.8.6 /usr/local/lib/perl5/site_perl /usr/local/lib/perl5/5.8.6/BSDPAN /usr/local/lib/perl5/5.8.6/mach /usr/local/lib/perl5/5.8.6 .) at /home/dezz/www/site1/cgi-bin/mail.pl line 3.
BEGIN failed--compilation aborted at /home/dezz/www/site1/cgi-bin/mail.pl line 3.
[Mon Nov 14 21:33:23 2005] [error] [client 217.118.66.232] Premature end of script headers: /home/dezz/www/site1/cgi-bin/mail.pl

А вот код, скорее неправильный.
Код

#!/usr/bin/perl -w
use strict;
use Mail::Sendmail;
use CGI::Carp 'fatalsToBrowser';
use CGI qw/:standard/;

 %mail = ( To      => '[email protected]',
            From    => '[email protected]',
            Message => "This is a test message"
           );

  sendmail(%mail) or die $Mail::Sendmail::error;

  print "OK. Log says:\n", $Mail::Sendmail::log;

exit(0);       



Ну, вот такие дела, пиши.

P.s. Как у Вас тут все строго smile , наверное korob2001 попадет. Не люблю начальства. smile

Автор: r 17.11.2005, 06:55
Все, решилось вот код:
Код

sub email{
  my($to, $from, $mess, $bcopy)=@_;  
 my $mailprog="/usr/sbin/sendmail -t";
  open (MAIL, "|$mailprog");
print MAIL "From: $from\n";
print MAIL "To: $to\n";
print MAIL "Subject: Заказ\n";
print MAIL "Content-type:text/html\n\n";
print MAIL "<html>\n";
print MAIL " <body>\n";
print MAIL "$mess\n";
print MAIL " </body>\n";
print MAIL "</html>\n";
close(MAIL);
};

работает. Спасибо Всем.

Автор: korob2001 17.11.2005, 07:25
Эх r, был бы ты зерегестрирован, я бы тебе сейчас плюс в репу влепил бы, за то, что сам решил свою проблему. Единственное, что я тебе посоветовал бы сделать, так это ставить сообщения в очередь.

Автор: r 18.11.2005, 23:20
Извините виноват, из деревни боковат smile , а в очередь ставить энто как?

Автор: korob2001 19.11.2005, 01:28
http://forum.vingrad.ru/index.php?showtopic=48419&st=15

Автор: r 19.11.2005, 07:43
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)