Forum Webscript.Ru
Программирование => Perl => Тема начата: novice2 от 10 Июля 2002, 15:29:54
-
Братья и сестры! Объясните новичку.
Как можно узнать результат посылки письма?
У меня на хосте нет sendmail. Почту отправляю с помощью Mail::Mailer. Стоит скорее всего qmail, но хочется универсальности в скрипте (Mail::Mailer автоматом выбирает среди sendmail, mail, smtp, qmail...).
Спасибо.
-
А сам напрямую с мэил сервером связываться непробовал? Это самый универсальный способ.
-
Evgeny
напрямую - это SMTP?
хочешь сказать, что все равно потом все по SMTP идет?
а какой сервер используется (я же его не указываю)?
попутно вопрос - существуют ли стандарты на ответ о недоставке "non-delivery notice"? хочется обработать ситуацию, когда письмо вроде ушло, а попозже ответ - типа "не могу доставить".
-
напрямую - это SMTP?
Да.
а какой сервер используется (я же его не указываю)?
Это спросить у админов нужно.
-
Вот код небольшой.
Правда только для unix mail сервера подходит.
#!/usr/bin/perl
$mailserver=\'mail.server.com\'; # здесь свой нужно подставить
$From=\'Me\';
$To=\'to_adress@mail.com\';
$Subject=\'Test Message\';
$Message="Test ok!\\nTest ok!\\nTest ok!";
$error=sendEmail($From,$To,$Subject,$Message);
if ($error)
{ print "\\nError: $error\\n";
}
sub sendEmail
{ local ($From,$To,$Subject,$Message)=@_;
local ($remotehost,$port)=($mailserver,25);
local ($AF_INET,$SOCK_STREAM,$sockaddr)=(2,1,\'S n a4 x8\');
local ($thisaddr,$thataddr);
$thisaddr=gethostbyname("");
$thataddr=gethostbyname($remotehost);
unless(socket(S, $AF_INET, $SOCK_STREAM, getprotobyname(\'tcp\')))
{ return 41;
}
unless(bind(S,pack($sockaddr, $AF_INET, 0, $thisaddr)))
{ return 42;
}
unless(connect(S,pack($sockaddr, $AF_INET, $port, $thataddr)))
{ return 43;
}
select(S); $|=1; select(STDOUT);
print S "helo uicserver\\n";
print $l=;
print S "mail from: <>\\n";
print $l=;
print S "rcpt to: $To\\n";
print $l=;
print S "data\\n";
print $l=;
print S "Subject: $Subject\\n";
print S "From: $From\\n";
print S "To: $To\\n";
print S "Content-Type: text\\/plain\\n\\n";
print S "$Message\\n";
print S "\\n.\\n";
print $l=;
print S "quit\\n";
print $l=;
close(S);
return 0;
}
-
Где взять Mail::Mailer и как с ним работать?
-
Где взять Mail::Mailer и как с ним работать?
ppm install mailtools
-
ppm install mailtools
Я не очень соображаю. Поподробнее пожалуйста.:)
-
Ты под Win работаеш ?
зайди в каталог с перлом (если он у тебя в PATH не прописан) и в командной строке набери то что я выше написал. Под *nix по идее команда должна выглядеть также
-
Под *nix по идее команда должна выглядеть также
perl MCPAN -e shell;
-
Есть еще модуль, который работает с почтовым сервером напрямую: Mail::Sender.
-
А где его взять и как пользоваться (примерчики)
-
А где его взять и как пользоваться (примерчики)
Фак читаем, да?
http://search.cpan.org/
-
Примерки посмотрел, как пользоваться понятно. Нужно ли что-то устанавливать. мне нужно на локале потестить.
-
Нужно ли что-то устанавливать. мне нужно на локале потестить.
Нужно.
-
Зашел в каталог, где стоит PERL. У меня С:\\Perl\\
Набрал "ppm install mailtools" в командной строке Диско Командира и ничего не произошло, только
Нажал Ctrl-O, а в окне написано:
"ppm" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Chs
Что нужно устанавливать. чтобы на локале потестить скрипт с использование Mail::Sender или Mail::Mailer.
-
Ищем ppm.bat, запускаем его, затем install все что хочешь.
Видимо, Perl криво установлен...
-
А может нужно в каталог C:\\Perl\\Bin\\ зайти ?
А лучше в PATH его добавь
-
Что нужно устанавливать. чтобы на локале потестить скрипт с использование Mail::Sender или Mail::Mailer.
Net::SMTP из libnet для Mail::Sender, Net::SMTP
или sendmail для Mail::Mailer.
Вообще я предпочитаю Mime::Lite, но это вопрос вкуса.:))
-
но это вопрос вкуса
[OFF]...и задачи[/OFF]
-
у меня на хостинге sendmail нет, нужно "самому" отправлять письма (без sendmail).
Хочу сделать feedback.
Что для этого лучше использовать?
-
http://www.perldoc.com/perl5.6.1/lib/Net/SMTP.html