Вверх ↑
Этот топик читают: Гость
Ответов: 99
Рейтинг: 1
#1: 2013-08-06 23:31:38 ЛС | профиль | цитата
Всем привет.
Сижу читаю, просвящаюсь, но не могу осилить задачку.

Приходит письмо. Разбераю парсером его включая текст. Далее текст пытаюсь загнать в мемо и получаю вместо текста это:

0KHQvtC+0LHRidC10L3QuNC1INC+0Lo=

Подскажите людя добрые, мы сами не месные

Подкажите плиз цепь-процедуру перекодировки примером

Заголовок:

Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

карма: 0

0
Ответов: 5446
Рейтинг: 323
#2: 2013-08-06 23:51:38 ЛС | профиль | цитата
NetCom, это base64 - на что вполне прозрачно указывает строка "Content-Transfer-Encoding: base64". Base64 у нас вроде Charset умеет декодировать (отдельный вопрос при чём тут charset...). Ну и потом тем же Charset-ом UTF8 в ANSI переводишь ("charset=utf-8")
карма: 1

0
Ответов: 99
Рейтинг: 1
#3: 2013-08-07 10:44:39 ЛС | профиль | цитата
iarspider, пробовал. не выходит. или не понимаю как делать.

не мог бы привести наглядный пример?

1) пример ниже

2) + теме топика еще похоже глюк
(отдельная история парсера еще) в нем я добвил разбор заголовка. если в теме письма латиница в блоке s1QWERTYs2 приходит
блок читается. если же s1ЙЦУКЕНs2 - не читается блок


Add(POP3_Parse,7528537,406,205)
{
}
Add(Charset,5327783,420,252)
{
Type=7
link(onCharset,13032945:doEvent1,[])
link(Text,7528537:Text,[])
}
Add(Hub,4792948,322,245)
{
OutCount=3
link(onEvent1,7528537:doParse,[(371,251)(371,211)])
link(onEvent2,5327783:doCharset,[])
link(onEvent3,2811650:doSearch,[(374,265)(374,363)])
}
Add(Memo,10830064,609,252)
{
Left=25
Top=10
Width=485
Height=350
}
Add(Message,5170302,133,259)
{
Message="close"
link(onMessage,6489836:doClose,[(184,265)(184,266)])
}
Add(BlockFind,2811650,413,357)
{
IncludeBlock=1
StartBlock="s1"
EndBlock="s2"
Point(onNotFind)
link(onSearch,13032945:doEvent2,[(489,363)(489,265)])
link(Text,7528537:Subject,[])
}
Add(Hub,13032945,532,252)
{
InCount=2
OutCount=1
link(onEvent1,10830064:doAdd,[])
}
Add(POP3,6489836,203,239)
{
Server="pop.....ru"
Count=0
Point(onError)
Point(doTop)
link(onConnect,2447810:doCase,[(243,245)(243,475)])
link(onRead,4792948:doEvent1,[(279,252)(279,251)])
}
Add(Counter,15189089,343,471)
{
link(onNext,6489836:doRead,[(379,477)(379,415)(191,415)(191,252)])
}
Add(Case,2447810,252,469)
{
Value=String(0)
link(onNextCase,15189089:doNext,[(324,475)(324,477)])
link(onTrue,10790268:doEvent2,[(302,482)(302,577)(79,577)(79,272)])
}
Add(Hub,10790268,91,259)
{
InCount=2
OutCount=1
link(onEvent1,5170302:doMessage,[])
}


карма: 0

0
Ответов: 1376
Рейтинг: 198
#4: 2013-08-07 10:49:05 ЛС | профиль | цитата
NetCom,
code_31553.txt
карма: 1

1
файлы: 1code_31553.txt [416B] [148]
Голосовали:NetCom
Ответов: 99
Рейтинг: 1
#5: 2013-08-07 11:34:02 ЛС | профиль | цитата
обновил схему. была ошибка
------------ Дoбавленo в 11.02:
foksov, спасибо.понял.
------------ Дoбавленo в 11.34:
получаю пустоту в мемо вместо текста письма после блока с кодировками.

что не правильно делаю?

Add(POP3_Parse,7528537,497,177)
{
}
Add(Hub,4792948,413,231)
{
OutCount=3
link(onEvent1,7528537:doParse,[(462,237)(462,183)])
link(onEvent2,10655176:doCharset,[])
link(onEvent3,2811650:doSearch,[(465,251)(465,349)])
}
Add(Memo,10830064,840,287)
{
Left=25
Top=10
Width=485
Height=350
}
Add(Message,5170302,224,245)
{
Message="close"
link(onMessage,6489836:doClose,[(275,251)(275,252)])
}
Add(BlockFind,2811650,504,343)
{
IncludeBlock=1
StartBlock="s1"
EndBlock="s2"
Point(onNotFind)
link(onSearch,13032945:doEvent2,[(580,349)(580,300)])
link(Text,7528537:Subject,[])
}
Add(Hub,13032945,763,287)
{
InCount=2
OutCount=1
link(onEvent1,10830064:doAdd,[])
}
Add(POP3,6489836,294,225)
{
Server="pop....ru"
Count=0
Point(onError)
Point(doTop)
link(onConnect,2447810:doCase,[(334,231)(334,461)])
link(onRead,4792948:doEvent1,[(370,238)(370,237)])
}
Add(Counter,15189089,434,457)
{
link(onNext,6489836:doRead,[(470,463)(470,401)(282,401)(282,238)])
}
Add(Case,2447810,343,455)
{
Value=String(0)
link(onNextCase,15189089:doNext,[(415,461)(415,463)])
link(onTrue,10790268:doEvent2,[(393,468)(393,563)(170,563)(170,258)])
}
Add(Hub,10790268,182,245)
{
InCount=2
OutCount=1
link(onEvent1,5170302:doMessage,[])
}
Add(Charset,10655176,546,238)
{
Type=4
link(onCharset,3763315:doCharset,[])
link(Text,7528537:Text,[(552,230)(517,230)])
}
Add(Charset,3763315,588,238)
{
Type=7
link(onCharset,13032945:doEvent1,[(692,244)(692,293)])
}


карма: 0

0
Ответов: 1376
Рейтинг: 198
#6: 2013-08-07 11:38:54 ЛС | профиль | цитата
NetCom, потесть это
code_31556.txt
POP3_parse --- Компонент предназначен для разбора неформатированного текста письма
карма: 1

0
файлы: 1code_31556.txt [2.2KB] [156]
Ответов: 99
Рейтинг: 1
#7: 2013-08-07 18:11:34 ЛС | профиль | цитата
foksov, Потестил. Отлично работает с латиницей! Кириллицу не может обработать в тексте сообщения....
------------ Дoбавленo в 18.11:
Еще раз мерси за пример.

Как думаете из-за чего кириллица не распознается ? (важная особенность читать слова на кириллице в программе)
карма: 0

0
Ответов: 1376
Рейтинг: 198
#8: 2013-08-07 19:24:10 ЛС | профиль | цитата
NetCom писал(а):
кириллица не распознается
распознаётся
code_31559.txt
в StrList находится то, что получено с точки Text комп-та POP3_Parse
карма: 1

0
файлы: 1code_31559.txt [684B] [232]
Ответов: 99
Рейтинг: 1
#9: 2013-08-10 03:13:03 ЛС | профиль | цитата
Действительно распознается. Ты прав.

У меня вопрос.
Глючит ли POP3_parse ?

Не мог бы ты проверить у себя приведенную мной выше схему. либо аналог.

Ошибки у меня следующие:
1) тема письма содержащая русский язык (кириллицу) - не читается компонентом POP3_parse
2) тело письма содержащее кирилицу так же не читается им

почтовой mail сервер - яндекс.ру

либо у меня криво сделано/либо компонент не распознает
------------ Дoбавленo в 16.09:
foksov, в твоем примере текст письма такой:

ÿ-ÿ¬ÿ¦ÿ¦ï¦ïTï¦ ÿ¦ïTÿ-ï¦
------------ Дoбавленo в 03.13:



кто-нибудь сможет перевести на читаемый текст это:


0KLQtdGB0YLQvtCy0L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUgMTA=

?
карма: 0

0
Ответов: 5446
Рейтинг: 323
#10: 2013-08-10 08:25:41 ЛС | профиль | цитата
NetCom, дык как и в первом случае - base64 + UTF8:
 Add(MainForm,2953706,21,105){
link(onCreate,7577997:doCharset,[(223,125)(223,195)])
}
Add(Charset,7577997,392,189)
{
Type=4
link(onCharset,26207:doCharset,[])
link(Text,14400806:Value,[(398,170)(426,170)])
}
Add(Message,10120533,490,189)
{
}
Add(Memory,14400806,420,119)
{
Default=String(0KLQtdGB0YLQvtCy0L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUgMTA=)
}
Add(Charset,26207,441,189)
{
Type=7
link(onCharset,10120533:doMessage,[])
}
карма: 1

0
Ответов: 99
Рейтинг: 1
#11: 2013-08-10 11:28:01 ЛС | профиль | цитата
iarspider, Спасибо большое за пример! В голове с трудом уворачивается действие чарсета друг за другом...нуно почитать подрбное инфо...

последний вопрос остался.... опять же с чарсетом..

приходящее письмо под эту кодировку когда имеет в subject латиницу - все обрабатывается хорошо. Но если кириллица.... он просто обрубает до первой русской буквы строку subject и выдает... т.е кириллица - преграда для pop3_parser в там случае...

Пример:

Тема письма: incoming mail from вася

результат: incoming mail from



искал инфо по форуму с этой засадой.. не нашел...

каким возможно образом тему письма так же проводить кодировкой... ?
попытался...не вышло...

Add(POP3_Parse,7528537,612,268)
{
}
Add(StrList,2725471,560,84)
{
}
Add(ArrayEnum,14481635,581,161)
{
link(onItem,462696:doCharset,[])
link(Array,2725471:Array,[(587,145)(580,145)])
}
Add(Memo,9585179,763,161)
{
Left=-130
Top=1790
}
Add(Charset,462696,651,161)
{
Type=4
link(onCharset,10075628:doCharset,[])
}
Add(Charset,10075628,700,161)
{
Type=7
link(onCharset,9585179:doAdd,[])
}
Add(Hub,12489366,504,154)
{
OutCount=3
link(onEvent2,7528537:doParse,[(565,167)(565,274)])
link(onEvent3,5027533:doMessage,[(543,174)(543,335)])
}
Add(Message,5027533,616,329)
{
link(Message,7528537:Subject,[(622,315)(625,315)])
}
Add(MainForm,13811480,175,133)
{
Width=307
Height=207
link(onCreate,6489836:doConnect,[(282,153)(282,213)(256,213)(244,231)(244,273)])
}
Add(Memory,14400806,413,98)
{
Default=String(0KLQtdGB0YLQvtCy0L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUgMTA=)
}
Add(POP3,6489836,268,267)
{
Server="pop.....ru"
Count=0
Point(onError)
Point(doTop)
link(onConnect,15156465:doData,[(314,273)(314,321)])
link(onRead,10572990:doCase,[(310,280)(310,244)])
}
Add(Case,10572990,341,238)
{
Value=String(ok)
link(onNextCase,12489366:doEvent1,[(439,244)(439,160)])
link(onTrue,6489836:doClose,[(391,251)(391,226)(232,226)(232,294)])
}
Add(DoData,15156465,329,315)
{
Data=String(1)
link(onEventData,6489836:doRead,[(368,321)(368,365)(256,365)(256,280)])
}



карма: 0

0
Ответов: 5446
Рейтинг: 323
#12: 2013-08-10 13:46:28 ЛС | профиль | цитата
NetCom писал(а):
В голове с трудом уворачивается действие чарсета друг за другом...

Да ничего особенно сложного там нет - тебя же (скажем) два math подряд не смущают?
карма: 1

0
Ответов: 99
Рейтинг: 1
#13: 2013-08-10 14:41:37 ЛС | профиль | цитата
iarspider, нет... я не рожу визуально и собственно логически как из WIN получается UTF-8 у этих компонентов...

Я вот думаю над тем как subject письма вытаскивать с кириллицой. Толи код письма полностью разбирать и строку subject декодировать пыпаться...толи накидать в схему еще что перед do_Parse .....

как говорится приму любые схемы для теста чтобы понять и оставить в мемориз форуму ибо подобной темы еще не встречал в поиске...
карма: 0

0
Ответов: 99
Рейтинг: 1
#14: 2013-08-13 00:02:20 ЛС | профиль | цитата
вылез интересный момент.
пришло письмо в кодировке

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

Текст для проверки:
PHAgZGlyPSJsdHIiPvzUzyDUxdPUICk8L3A+DQo=
--089e01161992e3070704e3c302af--

И используем пример от FOKSOV
code_31584.txt

так вот при вводе этого текста в STRLIST текст читаем
но если он берется по примеру но уже из элемента POP3 в составе письма то при переборе ARRAYENUM точка ARRAY имеет NULL


+


вопрос. каким образом можно добавить разбор писем заранее не известных по кодировке. т.е могут быть и utf8 и koi8 чтобы он правильно читал и добавлял текст ?


Add(MainForm,19160,210,315)
{
Left=21
Top=105
Width=402
Height=192
Font=[Arial,8,0,0,1]
Caption="Mailer"
Point(onClose)
}
Add(Charset,8150496,448,420)
{
Type=3
}
Add(StrList,1642426,336,301)
{
}
Add(ArrayEnum,9299318,350,371)
{
link(onItem,7577997:doCharset,[])
link(Array,1642426:Array,[])
}
Add(Charset,7577997,399,371)
{
Type=4
link(onCharset,26207:doCharset,[])
}
Add(Charset,26207,448,371)
{
Type=7
link(onCharset,9819640:doEvent1,[(492,377)(492,391)])
}
Add(Memo,2558952,546,392)
{
Left=-130
Top=1790
}
Add(Hub,9819640,504,385)
{
InCount=2
OutCount=1
link(onEvent1,2558952:doAdd,[(536,391)(536,398)])
}



карма: 0

0
файлы: 1code_31584.txt [2.2KB] [137]
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)