Вверх ↑
Этот топик читают: Гость
Ответов: 176
Рейтинг: 12
#1: 2007-03-21 13:15:21 ЛС | профиль | цитата
Сегодня заметил, что POP3 парсер выдаёт текст письма неправильно. К примеру письмо сожержит такой текст:
строка 1
строка 2
строка 3

При разборе парсер выдаст вот это:
стока 1стока 2стока 3

Вот схемка
code_1105.txt

Может кто знает как это исправить?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1code_1105.txt [2.1KB] [335]
Ответов: 2060
Рейтинг: 28
#2: 2007-03-21 15:12:03 ЛС | профиль | цитата
toropchin, я плохо разбераюсь в хакерских штучках, но письмо для меня имеет подозрительный характер. Тестировать твою схему не стал.
карма: 1

0
Ответов: 9906
Рейтинг: 351
#3: 2007-03-21 15:34:32 ЛС | профиль | цитата
toropchin,
С удивлением обнаруживаю, что это сделано СПЕЦИАЛЬНО.
А новая строка - это признак пустой строки в MailText

procedure THIPOP3_Parse._work_doParse;
..............
else
begin
_Message_Text := ';
while i < list.Count do
begin
if list.Items[i] = ' then
_Message_Text := _Message_Text + #13#10
else _Message_Text := _Message_Text + list.Items[i];
inc(i);
end;
end;
end;
Отсюда вопрос: а Вы уверены, что правильно понимаете POP3 протокол
карма: 9

0
Ответов: 176
Рейтинг: 12
#4: 2007-03-21 16:16:55 ЛС | профиль | цитата
Эдик писал(а):
я плохо разбераюсь в хакерских штучках, но письмо для меня имеет подозрительный характер. Тестировать твою схему не стал

И, что в нём такого страшного?

[size=-2]------ Добавлено в 16:16
Galkov писал(а):
Отсюда вопрос: а Вы уверены, что правильно понимаете POP3 протокол

Ну в общем да, уверен.

Если открыть это письмо в почтовике, то он его понимает правильно. Тоесть строки не собираются в одну строку, а располагаются как надо (через enter)
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1456157.rar [628B] [178]
Ответов: 3655
Рейтинг: 69
#5: 2007-03-21 16:21:37 ЛС | профиль | цитата
Galkov писал(а):
С удивлением обнаруживаю, что это сделано СПЕЦИАЛЬНО.

Да действительно так и должно быть ,где то про это читал,что читается наоборот.
Типа там стек.
карма: 0

0
Ответов: 176
Рейтинг: 12
#6: 2007-03-21 16:28:54 ЛС | профиль | цитата
Если сделать вот так, то работает как надо

procedure THIPOP3_Parse._work_doParse;
..............
else
begin
_Message_Text := ';
while i < list.Count do
begin
if list.Items[i] = ' then
_Message_Text := _Message_Text + #13#10
else _Message_Text := _Message_Text + list.Items[i] + #13#10;
inc(i);
end;
end;
end;
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 3655
Рейтинг: 69
#7: 2007-03-21 16:49:57 ЛС | профиль | цитата
toropchin писал(а):
Если сделать вот так, то работает как надо

А теперь посмотри как будет отображаться обычный текст
карма: 0

0
Ответов: 176
Рейтинг: 12
#8: 2007-03-21 17:01:21 ЛС | профиль | цитата
Текст отображается абсолютно также как я его ввожу.

[size=-2]------ Добавлено в 17:01
code_1106.txt
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 3655
Рейтинг: 69
#9: 2007-03-21 17:03:05 ЛС | профиль | цитата
toropchin писал(а):
Текст отображается абсолютно также как я его ввожу.

toropchin,
При отправке через инет
карма: 0

0
Ответов: 176
Рейтинг: 12
#10: 2007-03-21 17:27:46 ЛС | профиль | цитата
Вячеслав писал(а):
При отправке через инет

У меня отлично работает

code_1107.txt
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1code_1107.txt [1.4KB] [261]
Администрация
Ответов: 15295
Рейтинг: 1519
#11: 2007-03-21 20:17:45 ЛС | профиль | цитата
да видимо это так и есть. Там чуть выше по коду секции в multi-part писме разбираются именно таким образом.
карма: 27
0
Ответов: 176
Рейтинг: 12
#12: 2007-03-21 21:06:09 ЛС | профиль | цитата
Dilma,Я нащёл ещё один глюк. Теперь с разбором HTML
Если письмо создано в кодировке Koi8-r, то парсер выдаёт "кривой" текст.

code_1106.txt

Я изменил Вот это
procedure THIPOP3_Parse.Decode;
............................
begin
if _Encode = '8bit' then
Result := Koi8ToWin(Text)
else if _Encode = 'quoted-printable' then
Result := Koi8ToWin( quoted_printable(Text) )
На это.
procedure THIPOP3_Parse.Decode;
.............................
var s,_Content_Type,_FName,_Char:string;
procedure _Decode(var Result:string);
var lst:PStrList;
i:integer;
begin
if _Encode = '8bit' then
Result := (Text) // Исправлено мной Result := Koi8ToWin(Text)
else if _Encode = 'quoted-printable' then
Result := ( quoted_printable(Text) ) //Исправлено мной: Result := Koi8ToWin( quoted_printable(Text) )
Стал разбирать HTML нормально
Вопрос: Почему не работало с Koi8ToWin?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 2code_1106.txt [1.7KB] [282], code_1108.txt [1.7KB] [286]
Администрация
Ответов: 15295
Рейтинг: 1519
#13: 2007-03-21 21:15:27 ЛС | профиль | цитата
ну это не глюк уже.
карма: 27
0
Ответов: 176
Рейтинг: 12
#14: 2007-03-22 06:05:42 ЛС | профиль | цитата
Вот именнно, что не глюк. В принципе должно работать, но разбирал-то неправильно. Я въехать не могу, почему это происходит.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 9906
Рейтинг: 351
#15: 2007-03-22 07:09:14 ЛС | профиль | цитата
toropchin, я вот тебе один умный вещь скажу:
в твоих примерах 1106 и 1108 - это совсем не koi8-r
карма: 9

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)