The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Скрипт на PERL для работы с почтой (отправка по SMTP)"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Скрипт на PERL для работы с почтой (отправка по SMTP)"
Сообщение от Vlad emailИскать по авторуВ закладки on 13-Ноя-03, 08:23  (MSK)
Я с 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;
}
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

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

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

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Скрипт на PERL для работы с почтой (отправка по SMTP)"
Сообщение от ctybr emailИскать по авторуВ закладки on 14-Ноя-03, 08:55  (MSK)
>>Я такую задачу решал с помощью модуля 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_auth.pm

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Скрипт на PERL для работы с почтой (отправка по SMTP)"
Сообщение от 1 Искать по авторуВ закладки on 15-Ноя-03, 15:22  (MSK)
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);
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру