Forum Webscript.Ru
Программирование => Perl => Тема начата: Ленивый гость от 01 Октября 2002, 06:16:12
-
Как perl-скрипты посылают письма? Я видел 2 разных примера:
1)
open MAIL, \'|/path/to/your/sendmail -t\';
print MAIL "From: mail@my.host\\n",
"To: webmaster@my.host\\n",
"Subject: Mail from perl script!\\n\\n",
$message;
close MAIL;
2)
open (MAIL, "/usr/sbin/sendmail | webmaster@bonunm.ru");
print MAIL "To: webmaster@bonum.ru\\n";
print MAIL "From: Your_name\\n";
print MAIL "Subject: Test\\n\\n";
print MAIL "howdy, dude!";
close (MAIL);
Чем они отличаются, и почему на моём хостинге (h1.ru) ни один не работает? Какие ошибки я мог допустить?
-
А ты пошли вот как:
open(X,"|/path/to/sendmail -oi -t -odq");
print X <<"EOF";
From: mail@my.host
To: webmaster@my.host
Subject: Mail from perl script!
$message;
EOF
close X;
-
Написал скрипт такого содержания:
#!/usr/local/bin/perl
open (MAIL, \'|/usr/sbin/sendmail -oi -t -odq\');
print MAIL \'<<\', EOF;
print MAIL \'From: survey@mydomain.h1.ru\', "\\n";
print MAIL \'To: myemail@hotmail.com\', "\\n";
print MAIL \'Subject: survey status update\', "\\n\\n";
print MAIL "this\\nis\\nthe\\nmessage\\n";
print MAIL EOF;
close MAIL;
print "Content-type: text/html\\n\\n";
print "your message was sent";
Сообщение не приходит. Что в этом скрипте не правильно? Заранее спасибо за ответ.
-
Попробуй:
HTML письма
#!/usr/bin/perl
$sendmail = "/usr/sbin/sendmail";
$tomail = "куда";
$location = "редирект после";
$subject = "Тема письма";
read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});
# Split the name-value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~
s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# strip off any possible SSI comment tags.
$value =~ s///g;
$in{$name} = $value;
}
open (MAIL, "|$sendmail -t");
print MAIL "To: <$in{\'email\'}>\\n";
print MAIL "From: <$tomail>\\n";
print MAIL "Reply-to: <$tomail>\\n";
print MAIL "Subject: $subject\\n";
print MAIL "MIME-Version: 1.0\\n";
print MAIL "Content-Transfer-Encoding: 8bit\\n";
print MAIL "Content-type: text/html;\\n";
print MAIL "X-Priority: 3\\n";
print MAIL "X-MSMail-Priority: Normal\\n\\n";
print MAIL "\\n\\n";
print MAIL "\\n";
print MAIL "Здесь что угодно\\n";
print MAIL "Здесь что угодно\\n";
print MAIL "Здесь что угодно\\n";
print MAIL "\\n";
print MAIL "\\n\\n" ;
close(MAIL);
print "Location: $location\\n\\n";
Простое (текстовое) письмо:
#!/usr/bin/perl
$sendmail = "/usr/sbin/sendmail";
$tomail = "куда";
$location = "редирект после";
$subject = "Тема письма";
read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'});
# Split the name-value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~
s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# strip off any possible SSI comment tags.
$value =~ s///g;
$in{$name} = $value;
}
open (MAIL, "|$sendmail -t");
print MAIL "To: <$in{\'email\'}>\\n";
print MAIL "From: <$tomail>\\n";
print MAIL "Reply-to: <$tomail>\\n";
print MAIL "Subject: $subject\\n";
print MAIL "MIME-Version: 1.0\\n";
print MAIL "Content-Transfer-Encoding: 8bit\\n";
print MAIL "X-Priority: 3\\n";
print MAIL "X-MSMail-Priority: Normal\\n\\n";
print MAIL "\\n\\n";
print MAIL "Здесь что угодно\\n";
print MAIL "Здесь что угодно\\n";
print MAIL "Здесь что угодно\\n";
print MAIL "\\n\\n" ;
close(MAIL);
print "Location: $location\\n\\n";
-
Какие ошибки я мог допустить?
Вот первое, что бросилось в глаза:
print MAIL "From: mail@my.host\\n"
- @my интерполируется в эту строку, пиши "\\@my".
-
Ведь я нормально написал?
#!/usr/bin/perl -w
use strict;
open(X,"|/usr/sbin/sendmail -oi -t -odq");
print X <<"EOF";
From: mail@my.host
To: webmaster@my.host
Subject: Mail from perl script!
This is the test mail message!!!
EOF
close X;
print "Content-type: text/html\\n\\n";
print "All done
\\n";
-
Serchey
Не знал, что на перле можно так делать. Но так или иначе это вызывает ошибку 500.
alex007
HTML письма и простые текстовые письма тоже не посылаются. Может мне запрещено пользоваться sendmail’om? На h1.ru запрещают и ограничивают всё что только можно (на мой взгляд даже больше). Может кто-нибудь знает хороший бесплатный хостинг с поддержкой cgi?
-
Но так или иначе это вызывает ошибку 500.
Что за бред опять, кому нужна твоя "ошибку 500"?! В логах что?
-
Может мне запрещено пользоваться sendmail’om
Очень может быть.
Хотя я тоже хостюсь на h1.ru, но у меня не было проблем с sendmail\'ом.
Попробуй зашелится к ним и набей что-то вроде:
bash$ /usr/sbin/sendmail -t
from: admin@net.ru
to: webmaster@my.host
subject: test
bla-bla-bla
.
Если не сработает, пиши письмо в супорт и проси дать доступ к sendmail\'у с обоснованием.
-
Да, сорри(мог бы и сам догадатся) -
#!/usr/bin/perl -w
use strict;
open(X,"|/usr/sbin/sendmail -oi -t -odq");
print X <<"EOF";
From: mail\\@my.host
To: webmaster\\@my.host
Subject: Mail from perl script!
This is the test mail message!!!
EOF
close X;
print "Content-type: text/html\\n\\n";
print "All done
\\n";
Не знал, что на перле можно так делать
- а теперь знаешь?