Forum Webscript.Ru

Программирование => Perl => Тема начата: Ленивый гость от 01 Октября 2002, 06:16:12

Название: sendmail
Отправлено: Ленивый гость от 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) ни один не работает? Какие ошибки я мог допустить?
Название: sendmail
Отправлено: Serchey от 01 Октября 2002, 10:35:54
А ты пошли вот как:
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;
Название: sendmail
Отправлено: Ленивый гость от 01 Октября 2002, 21:11:03
Написал скрипт такого содержания:

#!/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";

Сообщение не приходит. Что в этом скрипте не правильно? Заранее спасибо за ответ.
Название: sendmail
Отправлено: alex007 от 01 Октября 2002, 22:55:54
Попробуй:

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";
Название: sendmail
Отправлено: YA от 01 Октября 2002, 23:20:20
Цитировать
Какие ошибки я мог допустить?
Вот первое, что бросилось в глаза:
Цитировать
print MAIL "From: mail@my.host\\n"
- @my интерполируется в эту строку, пиши "\\@my".
Название: sendmail
Отправлено: Serchey от 02 Октября 2002, 10:10:03
Ведь я нормально написал?

#!/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";
Название: sendmail
Отправлено: Ленивый гость от 03 Октября 2002, 01:39:38
Serchey
Не знал, что на перле можно так делать. Но так или иначе это вызывает ошибку 500.

alex007
HTML письма и простые текстовые письма тоже не посылаются. Может мне запрещено пользоваться sendmail’om? На h1.ru запрещают и ограничивают всё что только можно (на мой взгляд даже больше). Может кто-нибудь знает хороший бесплатный хостинг с поддержкой cgi?
Название: sendmail
Отправлено: YA от 03 Октября 2002, 02:03:11
Цитировать
Но так или иначе это вызывает ошибку 500.
Что за бред опять, кому нужна твоя "ошибку 500"?! В логах что?
Название: sendmail
Отправлено: lalex от 03 Октября 2002, 11:06:43
Цитировать
Может мне запрещено пользоваться sendmail’om

Очень может быть.
Хотя я тоже хостюсь на h1.ru, но у меня не было проблем с sendmail\'ом.
Попробуй зашелится к ним и набей что-то вроде:
bash$ /usr/sbin/sendmail -t
from: admin@net.ru
to: webmaster@my.host
subject: test

bla-bla-bla
.
Если не сработает, пиши письмо в супорт и проси дать доступ к sendmail\'у с обоснованием.
Название: sendmail
Отправлено: Serchey от 03 Октября 2002, 11:07:16
Да, сорри(мог бы и сам догадатся) -
#!/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";

Цитировать
Не знал, что на перле можно так делать
- а теперь знаешь?