Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Получить содержание почтового ящика


Автор: Nаtаshа 11.10.2011, 00:02
Код



use Socket;



.....

#проверки на ошибки
print "Listing messages ... ";
if(!send(SOCK,"LIST\n",0))
{
    print "FAILED\n";
    exit(1);
}
if(!recv(SOCK,$listnum,1000,0))
{
    print "FAILED\n";
    exit(1);
}
if($listnum !~ /\+OK.*/)
{
    print "FAILED\n$data";
    exit(1);
}
print "OK\n$listnum\n";


#*****надо считать всю почту в файл

open(OUT,">>messages.txt");


if(!send(SOCK,"RETR 5\n\n",0))
{
    print "FAILED\n";
    exit(1);
}

if(!recv(SOCK,$data,1000,0))
{
    print "FAILED\n";
    exit(1);
}
print "$data\n";
close(OUT);

#*****считать письма в файл

close(SOCK);

exit(0);




Собственно немогу понять как считать сами письма и записать в файл. Соединение есть. Количество писем возвращает.
Вот ответ 

Цитата

Resolving pop.mail.ru ... OK
Connecting to pop.mail.ru ... OK
Awaiting server response... OK
Starting autentification ... OK
Listing messages ... OK
+OK 18 messages (53248 octets)

1 3407

2 3468

3 4807

4 2828

5 2489

6 2073

7 1963

8 2233

9 3896

10 2379

11 1881

12 2742

13 6754

14 3999

15 2237

16 1746

17 2229

18 1894

.


+OK 2489 octets

Автор: kotkota23 11.10.2011, 09:28
Nаtаshа, 
засылай в сокет retr, номер письма, а потом читай из сокета до точки

Автор: dixoNICH 11.10.2011, 16:18
Код

vec(my $win, fileno($socket), 1) = 1;
        my $timeout = 10;
        while(1){
            my $p = select($win, undef, undef, $timeout);
            if($p>0){
                sysread($socket,$str,1024);
            }else{
             print "Timeout\n";
            }
            $buf .=$str;
            last if $str=~/\n?\.\r\n$/;
            print FILE $buf;


Автор: Nаtаshа 11.10.2011, 20:27
dixoNICH,  Спасибо. все работает, но вот как вытянуть из 

Код

if(!send(SOCK,"LIST\n",0))
{
    print "FAILED\n";
    exit(1);
}
if(!recv(SOCK,$listnum,1000,0))
{
    print "FAILED\n";
    exit(1);
}
if($listnum !~ /\+OK.*/)
{
    print "FAILED\n$data";
    exit(1);
}
print "OK\n$listnum\n";


Тут в listnum хранится инфа о пиьмах. А как вытянуть из listnum число писем и соответсвенно скачивать все письма из ящика.

Автор: kotkota23 11.10.2011, 22:36
Nаtаshа, перечитай что я уже писал, посмотри в интернете пример сессии

Автор: Nаtаshа 11.10.2011, 22:57
Всем спасибо! Во всем сама разобралась. 

Привет, Александру Зульфаровичу....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)