Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> POP3 
:(
    Опции темы
dixoNICH
Дата 5.4.2011, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



в общем, вопрос в том : как мне получить сообщение? в RFC написано, что команда RETR выводит содержимое сообщение, но, ответ от сервера примерно ввиде : +OK, 120 octets. а как собственно сообщение прочитать? где мне его увидеть? средствами перла.
т.е понятно, что отправляю серверу : 
Код

print $socket "RETR \n";

PM MAIL   Вверх
Pfailed
Дата 5.4.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Нужно
Код

print $socket "RETR $id\015\012";


где $id - идентификатор сообщения, полученный командой LIST.
Также смотрите в исходники Net::POP3



--------------------
PM MAIL   Вверх
dixoNICH
Дата 5.4.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Цитата(Pfailed @ 5.4.2011,  17:56)
Нужно
Код

print $socket "RETR $id\015\012";


где $id - идентификатор сообщения, полученный командой LIST.
Также смотрите в исходники Net::POP3

пишу без модуля pop3)
надо было уточнить.
ну и что, напишу я это, в ответ же мне придёт что-то в стиле
+OK 120 octets
а как вывести само сообщение?
recv мб мне может помочь?
PM MAIL   Вверх
Pfailed
Дата 5.4.2011, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Читайте дальше пока не встретите строку равную ".\015\012".
Net::POP3 имелся ввиду как источник где можно подсмотреть пример реализации.


--------------------
PM MAIL   Вверх
dixoNICH
Дата 5.4.2011, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



не, всё же реализация через Net::POP3, по-моему, сильно отличается от моей smile)
не совсем понял, как извлеку я сообщения оттуда со своей реализацией)
PM MAIL   Вверх
dixoNICH
Дата 6.4.2011, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



всё, разобрался.
вывожу в фором с помощью recv. осталось парсить строку только smile
кстати если мне приходит русский текст или картинка - то как мне их обработать?
PM MAIL   Вверх
dixoNICH
Дата 7.4.2011, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



_ЙoЗПѓєЗАЯЪДїхrn>Б>lоКяЇ€тЋРЉ с
в общем воспользовался я use MIME::Base64;
и получил это
что это и как мне получить русский текст? ))

PM MAIL   Вверх
Pfailed
Дата 7.4.2011, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Какая кодировка у письма? Покажите вообще полученное сообщение до изменений.


--------------------
PM MAIL   Вверх
dixoNICH
Дата 7.4.2011, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Код

l5OJbeI87RINzp+B3jn+4lAH7m6Vex6no9vdplRImWz1WtEDdbmuJ8IXUaWdxYpIXSJsxEr1RhuG

Pz/Su5j5hX3oAcu1tu77wp9QpwTn5amHNADx90UD7opoanZFAC1JUdSUASKBj/gVSVGu4r1p4GDQ

AtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAfMmtpL9rfHy

r0rlClzDGzfdYc16DerHLdMr/drkdTDpJgKCh/xoAr6fcvcxlJP7v92qhAg1VmVMf3adBJ5VxvC7

m/iq7HEk8yvt3UAWI5JJY1DD5TxitvSbZDqSbVxiqUuyCFQF5rT0GXzb9fTdQB6Wi7bH/gNZ8nWt

XH+i4rLcYb+7QBVIVWY008x8feqZhTMYj4+96UAVCPmpMmnE4b7tMPFAC5NL/F83502n7hQBLH93

это картинка так пришла.

Код

Subject: =?KOI8-R?B?z9A=?=

заголовок (на русском)

Код

Content-Type: text/html; charset=KOI8-R

Content-Transfer-Encoding: base64



xsHS2cbB0tnGzM/B0sbZzM/B0sbZz8zB0tnGzM/B2cbSwczP2cbSwczPxtnB0szG2c/B0tnGwczP

xtnBPGJyPgo=

--000e0cd58e3806fede04a05754fa--

вот, вроде, сообщение.


PM MAIL   Вверх
Pfailed
Дата 7.4.2011, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



После декодирования base64 перекодируйте в нужную кодировку. Очевидно, что здесь сообщение в кодировке koi8-r.
perldoc Encode


--------------------
PM MAIL   Вверх
dixoNICH
Дата 7.4.2011, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



а какая кодировка мне нужна, чтобы получить русский текст и вывести его в eml файл?
PM MAIL   Вверх
Pfailed
Дата 7.4.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Та, которую понимает ваш просмотрщик.


--------------------
PM MAIL   Вверх
dixoNICH
Дата 9.4.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



а есть универсальная функция для перекодировки в cp1251? (ну, или что там поймёт виндовс и eml)
чтобы, например, не из utf8 в cp1251, а из любой кодировки
ну или как из koi8-r получить cp1251 (ну, или что понимает виндовс smile)))))))))
просто не могу разобраться, перлдок не очень помогает, и гугл тоже(


Это сообщение отредактировал(а) dixoNICH - 9.4.2011, 16:47
PM MAIL   Вверх
dixoNICH
Дата 10.4.2011, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



ещё одна проблема : если отправляю файл, то он, каким-то образом ломает сообщения мне )) взависимости от размера.
если большой - то все, если не очень то парочку smile
вот код, помогите разобраться, пожалуйста
Код

$,="\n";
open F, ">mail.txt";
use IO::Socket; 
    my $host="pop.yandex.ru"; #хост #  print "Enter host please : ";my $host=<>;
    my $port=110; #pop3 в основном использует 110 порт.
    my $login = "yaroslavlyzlov\n";#логин
    my $password ="privetik\n"; #пароль 
##################<---------СОЕДИНЯЕМСЯ С СЕРВЕРОМ------->####################
        sub CONNECT {
        $socket =    IO::Socket::INET->new (
                    PeerAddr => $host,
                    PeerPort => $port,
                    Proto => "tcp",
                    Type => SOCK_STREAM)
                    or die "Can't connect to $host:$port, $!\n";
        }
        CONNECT;
#########################<----------АВТОРИЗАЦИЯ------------->######################### 
        sub AUTHORIZATION {
            my $invitation=<$socket>; #приглашение сервера (+OK,-ERR etc)
            print $socket "USER $login";  
                my $invitation=<$socket>; #print $invitation;
            print $socket "PASS $password"; 
                my $invitation=<$socket>; #print $invitation;
        }
        AUTHORIZATION; 
        
        sub LISTandRETR {
            print $socket "LIST\n";
            my $invitation=<$socket>;
            $invitation=~/(\d+)/; # выделяем кол-во сообщений
            $qt=$1; # колличество сообщений
            open F, ">mail.txt";
                for($i=1;$i<$qt+1;$i++) {
                    $invitation=<$socket>; 
                    $invitation=~m/(\d+)\s(\d+)/; # для вывода номера и размера письма
                    print "Number : $1\n"; 
                    print "Octets : $2\n";
                    $let=$1;
                    print $socket "RETR $i\n";
                    #print $invitation;
                    recv $socket, $invitation, $message[$i]+1000000, $k;
                    print F $invitation;
                    $invitation=~m/From:\s.*\s\<(.*)\>/;
                    print  "From : $1\n";
                    $invitation=~m/Subject:\s(.*)/;
                    print  "Subject : $1\n";
                    $invitation=~m/Date:\s(.*)/;
                    print  "Date : $1\n";
                    $invitation=~m/Message-ID:\s(.*)/;
                    print "Message-ID : $1\n";
                    #$invitation=~m/Content-Type:(\s).*\n\n(.*)\n\n/;
                    #print "Message : $2\n";
                    #print "Message : $2\n";
                    print "--------------------------\n";                
                }
        } LISTandRETR;
            
        
    
###################DELETE MESSAGE#################
        sub DELETE { #функция удаления сообщений 
            print "Remove any post?  Enter yes or no : ";
            $yes_or_no=<>;
            chomp $yes_or_no;
            if($yes_or_no eq "yes") {
                print "Select the number of messages you want to delete : ";
                $number_for_del=<>;
                print $socket "DELE $number_for_del\n";  
                    my $invitation=<$socket>; 
                    print $invitation;
            }    
        }
        DELETE;            
###################QUIT#################
        sub QUIT {    
            print $socket "QUIT\n"; 
                my $invitation=<$socket>;  
                print $invitation; 
        } 
        print "complete the pop3 session? Enter yes or no, please : ";
        $quit=<>;
        chomp $quit;
        if($quit eq "yes"){QUIT;} 
        
        

PM MAIL   Вверх
Pfailed
Дата 11.4.2011, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Цитата(dixoNICH @  9.4.2011,  13:18 Найти цитируемый пост)
ну или как из koi8-r получить cp1251

Функция from_to() из модуля Encode


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1348 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.