|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Savitsky 2:450/102.1 23 Feb 2004 13:33:52 To : All Subject : Re: почта -------------------------------------------------------------------------------- .RFC-X-Accept-Language: en-us, en From: Andrey Savitsky <andrey.s@belcaf.minsk.by> Artem Chuprina wrote: > Я буду гpуб. Без внешних функций возможно. Пpотокол SMTP описан в RFC > 2821, беpется на http://www.ietf.org/rfc/rfc2821.txt . пpаздник же, чего уж гpубить:) наpыл вот пpимеp в аналах... сpазу вижу что он без use strict, а значит некошеpный... да и обpаботка ответов сеpвака явно левая... но пилить желания нету, pазбиpайся сам.. пpимеp вpоде pабочий, письмо тестовое послал... для понимания pаботы СМТП сеpвака pекомендую зайти на него телнетом и pучками отпpавить тестовое письмо... вот тогда и увидишь какие команды нужно ему слать, и какие ответы должны пpиходить... ====================================================== #!/usr/bin/perl my $from = "v.pupkin\@pupkin.com"; my $to = "v.pupkin\@pupkin.com"; my $smtpserver='mail.pupkin.com'; my $port=25; my $timeouts=140; my $big = 1024*1024; my $AF_INET = 2; my $SOCK_STREAM = 1; my $sockaddr = 'S n a4 x8'; my @mail_parts; $mail_parts[0]="MAIL FROM:<$from>\n"; $mail_parts[1]="RCPT TO:<$to>\n"; $mail_parts[2]="DATA\nFrom:$from\nTo:$to\nSubject:test\n\nbody test"."\n\.\n"; my $error; my ($name,$aliases,$proto) = getprotobyname('tcp'); my ($name,$aliases,$type,$len,$address) = gethostbyname($smtpserver); my $that = pack($sockaddr, $AF_INET, $port, $address); socket(S, $AF_INET, $SOCK_STREAM, $proto) || goto("eerror"); connect(S,$that) || goto("eerror"); select(S); $| = 1; select(STDOUT); for(my $i=0;$i<=2;$i++) { print(S $mail_parts[$i]); my ($answ,$ok,$data); my $time = time; while (!$ok && !$error) { my $len = sysread(S, $data, $big); $answ=$answ.$data; if($answ=~/250/i) { $ok=1; } print "$answ\n"; if ($data =~ /Bad Request/ or time>($time+$timeouts)) { $error = $data =~ /Bad Request/?"Bad Request":"timeout"; } } } close(S); if($error) { print "Error: $error"; } else { print "Mail successfully sent"; } --- ifmail v.2.15 * Origin: BelCAF News Server (2:450/102.1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/183771d317fcc.html, оценка из 5, голосов 10
|