![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
в общем, вопрос в том : как мне получить сообщение? в RFC написано, что команда RETR выводит содержимое сообщение, но, ответ от сервера примерно ввиде : +OK, 120 octets. а как собственно сообщение прочитать? где мне его увидеть? средствами перла.
т.е понятно, что отправляю серверу :
|
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Нужно
где $id - идентификатор сообщения, полученный командой LIST. Также смотрите в исходники Net::POP3 |
|||
|
||||
dixoNICH |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
пишу без модуля pop3) надо было уточнить. ну и что, напишу я это, в ответ же мне придёт что-то в стиле +OK 120 octets а как вывести само сообщение? recv мб мне может помочь? |
||||
|
|||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Читайте дальше пока не встретите строку равную ".\015\012".
Net::POP3 имелся ввиду как источник где можно подсмотреть пример реализации. |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
не, всё же реализация через Net::POP3, по-моему, сильно отличается от моей
![]() не совсем понял, как извлеку я сообщения оттуда со своей реализацией) |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
всё, разобрался.
вывожу в фором с помощью recv. осталось парсить строку только ![]() кстати если мне приходит русский текст или картинка - то как мне их обработать? |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
_ЙoЗПѓєЗАЯЪДїхrn>Б>lоКяЇ€тЋРЉ с
в общем воспользовался я use MIME::Base64; и получил это что это и как мне получить русский текст? )) |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Какая кодировка у письма? Покажите вообще полученное сообщение до изменений.
|
|||
|
||||
dixoNICH |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
это картинка так пришла.
заголовок (на русском)
вот, вроде, сообщение. |
||||||
|
|||||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
После декодирования base64 перекодируйте в нужную кодировку. Очевидно, что здесь сообщение в кодировке koi8-r.
perldoc Encode |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
а какая кодировка мне нужна, чтобы получить русский текст и вывести его в eml файл?
|
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Та, которую понимает ваш просмотрщик.
|
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
а есть универсальная функция для перекодировки в cp1251? (ну, или что там поймёт виндовс и eml)
чтобы, например, не из utf8 в cp1251, а из любой кодировки ну или как из koi8-r получить cp1251 (ну, или что понимает виндовс ![]() просто не могу разобраться, перлдок не очень помогает, и гугл тоже( Это сообщение отредактировал(а) dixoNICH - 9.4.2011, 16:47 |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
ещё одна проблема : если отправляю файл, то он, каким-то образом ломает сообщения мне )) взависимости от размера.
если большой - то все, если не очень то парочку ![]() вот код, помогите разобраться, пожалуйста
|
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Функция from_to() из модуля Encode |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
выделяю так то, что должен декодировать и загоняю в cp1251 получаетсяя что то вроде : 12412425151 просто цифры. если не декодировать base64 - то так же) |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
делаю так. собственно, выводит что-то в стиле : 12421421421421321 ) без декодировки из бейс64 аналогично |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Прочтите внимательнее документацию по этой функции. Она не возвращает строку, а изменяет переданную.
|
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
спасибо.
|
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
Проблема такая : до меня доходят не все сообщения. точнее, когда как : иногда ничего не приходит, иногда 1 сообщение, иногда 2..n.
интуитивно понимаю в чём ошибка, точнее догадываюсь. возможно, что я отправляю ему команду LIST, а он ещё отослал ему всё, а я ему RETR уже шлю. но, как это исправить - не представляю. прошу помощи (
|
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
проблему решил
|
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
пытался решить проблему. всё сообщение не принять одним recv, пытался делить его на части по 1024 байта.
появилась проблема - он посылает мне первое сообщение несколько раз, не знаю, где я накосячил(
|
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: нет Всего: 18 |
dixoNICH, чего-то в вашем скрипте не заметно перебора писем после команды List. видно что вы все время одно и тоже письмо запрашиваете.
Логично получить количество писем в массив. а потом перебрав массив, получить все письма. |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
почему не заметно? отправляю лист, узнаю кол-во сообщений, запускаю фор от единицы, до кол-во сообщений + 1, в форе отправляю
print $socket "RETR $i\n"; потом сразу разбиваю и пушу в массив, потом джоин в строку |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: нет Всего: 18 |
For проглядел. Однако я погонял код у себя:
0. добавьте use strict; 1. ваша регулярка для получения количества писем не очень, на моем почтовом ящике не сработала лучше переписать так (\d+)\D+(\d+) 2. В моем случае, писем много и после запроса их индексов, а вы ведь после первого же письма сразу хотите получать тело, в тело попадают остатки команды LIST. 3. ваш код my $aaa = $2/1024; my $bbb = 1*$2 - $aaa*1024; ну очень плохо отрабатывает например размер 1921. может лучше my $aaa = int($size/1024); my $bbb = ($size % 1024); А вообще попробуйте так:
Это сообщение отредактировал(а) shamber - 29.4.2011, 10:32 |
|||
|
||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
не работает, вообще ничего никуда не выводит. вот мой код, возможно у вас заработает
![]()
|
|||
|
||||
shamber |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: нет Всего: 18 |
Вот вы все равно упорствуете. посмотрите. что я вам написал нулевым пунктом?
Дальше ваши ошибки
Потом сравните мою 39 строку и вашу 68. Дальше писать? И кстати, что за странный способ писать подпрограмму, а потом ее вызвать?(Да и еще забывать ее вызывать?) Во вложении почту узнаете? Добавлено @ 22:51
Вообщем, ищите отличия, в них вся соль. Это сообщение отредактировал(а) shamber - 1.5.2011, 01:44 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
||||||
|
|||||||
dixoNICH |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 222 Регистрация: 20.3.2011 Репутация: нет Всего: нет |
извините за мою не компетентность
![]() огромное спасибо за помощь! |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: нет Всего: 18 |
Пожалуйста.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |