URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2276
[ Назад ]

Исходное сообщение
"Скрипт на PERL для работы с почтой (отправка по SMTP)"

Отправлено Vlad , 13-Ноя-03 08:23 
Я с PERL только начал заниматься, а тут приспичило написать прогу которая соединяется по SMTP и отправляет письмо.
Я прогу нашел коечто урезал НО в одном месте ошибка не знаю как сделать правильно.

print smtp("mail.ru",\%m,"Hello","primer@mail.ru","primer2@mail.ru","Telo soobshenia","dgxyZrI="(это имя пользователя и пароль в Base64),"6zlrM5A6MTFy");

my($server,$g,$subject,$from,$to,$mdata,$user,$pass)=@_;
my($port,$iaddr,$paddr,$proto);
local(*SOCK);$crlf="\r\n";
($server,$port)=split(/:/,$server,2);
# если порт не задан используем 25
$port = 25 if !$port;
# создаем сокет
$iaddr = gethostbyname($server) or die $!;
$paddr = sockaddr_in($port,$iaddr);
$proto = getprotobyname("tcp") or die $!;
socket(SOCK,PF_INET,SOCK_STREAM,$proto) or return "Cannot create socket: $!";
# соединяемся
connect(SOCK,$paddr) or return "Connect to $server failed: $!";
# получаем банер
chomp($banner = <SOCK>);
  # идентифицируем себя
send(SOCK,"helo $server$crlf",0) or die $!;
chomp($data = <SOCK>);
if($data =~ /^2/){
if($user and $pass){
send(SOCK,"auth login$crlf",0);
chomp($data=<SOCK>);
if($data =~ /^3/){
# если мы попали сюда значит все ОК
# посылаем логин
send(SOCK,"$user$crlf",0);
chomp($data=<SOCK>);
# посылаем пароль
send(SOCK,"$pass$crlf$crlf",0);
chomp($data=<SOCK>);
if($data =~ /^5/i){
# если авторизация не удалась вернули, закрыли сокет и
# вернули ответ сервера
close(SOCK);
return $data;
}
}else{
return $data;
}
}
send(SOCK,"mail from: $from$crlf",0); #Вот здеся у меня SMTP сервер говорит неизвестная команда потому что @воспринимается как массив и получается primer.ru, а надо primer@mail.ru если сделать так primer\@mail.ru говорит неизвестная команда все равно, вообщем здесь у меня дальше не проходит. Помогите.)
chomp($data = <SOCK>);
if($data =~ /^5/i){
close(SOCK);
return $data;
}else{
send(SOCK,"rcpt to: $to$crlf",0);
chomp($data=<SOCK>);
if($data =~ /^5/i){
close(SOCK);
return $data;
}
}
$mdata.="From: $from$crlf";
$mdata.="To: $to$crlf";
# добавляем всякие поля...
$mdata.="Reply-To: $from$crlf";
$mdata.="Subject: $subject$crlf";
$mdata.="Content-Type: text/html; charset=\"windows-1251\"";
$mdata.=$crlf.$crlf;
# вызываем команду data
send(SOCK,"data$crlf",0);
chomp($data=<SOCK>);
# если она поддерживается код ответа сервера должен быть - продолжать (т.е. 3)
if($data =~ /^3/i){
# посылаем данные
send(SOCK,"$mdata$crlf",0);
# посылаем конец данных, т.е. <CRLF>.<CRLF>
send(SOCK,"$crlf.$crlf",0);
chomp($data=<SOCK>);
if($data !~ /^2/){
close(SOCK);
return $data;
}
# завершаем сессию и возвращаем Dropped
send(SOCK,"quit$crlf",0);
close(SOCK);
return "Dropped";
}else{
close(SOCK);
return $data;
}
}else{
close(SOCK);
return $data;
}
}


Содержание

Сообщения в этом обсуждении
"Скрипт на PERL для работы с почтой (отправка по SMTP)"
Отправлено ctybr , 13-Ноя-03 13:27 
>Я с PERL только начал заниматься, а тут приспичило написать прогу которая
>соединяется по SMTP и отправляет письмо.

Я такую задачу решал с помощью модуля Net::SMTP. Очень удобно.
вот здесь описание и исходники модуля.
http://search.cpan.org/~gbarr/libnet-1.17/Net/SMTP.pm

>Я прогу нашел коечто урезал НО в одном месте ошибка не знаю
>как сделать правильно.


"Скрипт на PERL для работы с почтой (отправка по SMTP)"
Отправлено Vlad , 13-Ноя-03 19:38 
>Я такую задачу решал с помощью модуля Net::SMTP. Очень удобно.
>вот здесь описание и исходники модуля.
>http://search.cpan.org/~gbarr/libnet-1.17/Net/SMTP.pm

А как с user и pass сделать просто почту отослать если SMTP с aut
покажи пример если есть пожалуйста.


"Скрипт на PERL для работы с почтой (отправка по SMTP)"
Отправлено ctybr , 14-Ноя-03 08:55 
>>Я такую задачу решал с помощью модуля Net::SMTP. Очень удобно.
>>вот здесь описание и исходники модуля.
>>http://search.cpan.org/~gbarr/libnet-1.17/Net/SMTP.pm
>
>А как с user и pass сделать просто почту отослать если SMTP
>с aut
>покажи пример если есть пожалуйста.

Честно говоря, с аутентификацией никогда не пробовал, но в этом случае можно поробовать другой модуль Net::SMTP_auth
Смотри вот здесь.

http://search.cpan.org/~apleiner/Net-SMTP_auth-0.07/SMTP_aut...

Там и пример есть.


"Скрипт на PERL для работы с почтой (отправка по SMTP)"
Отправлено 1 , 15-Ноя-03 15:22 
open (SENDMAIL, "| /usr/sbin/sendmail -t");
   print SENDMAIL "Subject: qqq\n";
   print SENDMAIL "From: bla@bla.ru\n";
   print SENDMAIL "To: bla2@bla.ru\n\n";
   print SENDMAIL "тело\n";
close(SENDMAIL);