![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите, куда копать (pop3) [D7, XP]
Утюг © (2006-10-24 21:07:00)Есть сохраненные на диск письма (ну, для примера, из ОЕ или Мыша). Чем можно из этих писем получить содержание служебных полей from, subject и т.д.?
Anatoly Podgoretsky (2006-10-26 15:48:00) [1]
> Почему, нельзя сделать так, чтобы письмо(тело) отображалось
А так оно и есть, как написано так и пишется, если сумеешь перестроить окно на КОИ то увидишь нормально.
А что Билл Гейтса не любишь и поэтому Виндоус-1251 применять не хочешь. А может тебе пока с сетями не работать пока не прочитаешь RFC?
Megabyte (2006-10-26 13:43:00) [2]Так, если перенастроить в OE на кодировку Кириллица(windows) и в Дельфи у TIdMessage.Charset := Windows-1251, то письмо(тело) отображается так, как пишется.
Почему, нельзя сделать так, чтобы письмо(тело) отображалось так как пишется при кодировке по умолчанию в OE: KOI8-R?
Megabyte (2006-10-26 13:33:00) [3]
> Anatoly Podgoretsky © (26.10.06 13:22) [24]
я понял, что правильно, только интересует, как мне в Дельфи задавать нужный текст, желательно на русском?
А то надо мне, например, слово "Неправильные". Мне надо отправить с Яндекса письмо с этим словом, посмотреть его в текущей кодировке блокнота: "оЕРТБЧЙМШОЩЕ", и потом вставить в код, чтобы он потом преобразовал слово.
Я не пойму, как мне настроить приложение так, чтобы в самой Дельфи вводить в тело слово "Неправильные", а не закодированную белиберду? :)
Anatoly Podgoretsky (2006-10-26 13:22:00) [4]Вот это конкретно и могу тебя успокоить все работает правильно!
Блокнот показывает в своей текущей кодировке, а ОЕ перекодирует, если у него для этого есть информация, в данном случае есть и он перекодировал это из КОИ в Юникод или Windows-1251
Megabyte (2006-10-26 13:19:00) [5]Слово внутри тела(body).
Я ж говорю, сделал все свойства в Дельфе также, как в письме, отправленном мною с Яндекса. Только, открыв письмо блокнотом, увидел, что слово "Привет" выглядит так: рТЙЧЕФ
Но в OE оно отображается как "Привет".
Anatoly Podgoretsky (2006-10-26 13:13:00) [6]А это слово где?
Письмо оно состоит из частей их как минимум две, и у каждой части свои независимые кодировки и транспортные упаковки.
Megabyte (2006-10-26 13:04:00) [7]Спасибо за направление на путь истиный. :)
Посмотрел свое письмо, кот. создаю через Дельфи(1), и письмо(на норм. русском), кот. послал со своего ящика на Яндексе(2):
Content-Type: text/plain;
charset="KOI8-R"
Content-Transfer-Encoding: 8bit
Также установил свойства в Дельфи.
Но вот в чем проблема: слово "Привет" отображается в файле 2 так: "рТЙЧЕФ"(т.е. оно потом перекодируется, конечно, в "Привет").
Как мне сделать так, чтобы можно было вводить норм. слово на русском в тело письма в Дельфи? Все же читать про MIME?
Anatoly Podgoretsky (2006-10-26 12:32:00) [8]Их все надо использовать, а недопонимание из-за того, что не читаешь первоисточник, просмотреть все rfc посвященые MIME и почты. В конце концов хотя бы посмотреть образцы различных писем, это делается не выходя из ОЕ и если это тяжело, то письма всегда можно сохранить в формате .eml на диск и далее любой текстовый редактор.
Megabyte (2006-10-26 12:06:00) [9]Отправляю почту с помощью SMTP.
Объясните, где и какую кодировку(или еще что) надо установить(просматриваю отправленные через Дельфи письма в OutLook)?
Потыкался во все свойства компонента TIdMessage, ничего путного не поучилось.
Там есть свойство CharSet, но оно может принимать значения неизвестных мне кодировок.
Копал свойства Encoding, ContentTransferEncoding и т.д. Если их и надо использовать, то как, я не понимаю.
Показывает русский шрифт, но там вместо слов набор других русских букв?!
Утюг (2006-10-25 17:14:00) [10]Но без этого байта файл не открывается.
LoadFromStream использовать не получилось.
Anatoly Podgoretsky (2006-10-25 16:35:00) [11]Такой байт не входит в состав формата .eml
Ты умолчал, можно ли использовать LoadFromStream, а то как то некрасиво записывать в файл и затем читать его.
Утюг (2006-10-25 15:40:00) [12]Слегка соврал (впрочем, не смертельно)
Stream := TFileStream.Create('C:\Temp\1.eml', fmOpenReadWrite);
buf[0] := Char($2E);
buf[1] := Char($0D);
buf[2] := Char($0A);
Stream.Seek(Stream.Size-2, soFromBeginning);
Stream.Write(buf,3);
Stream.Destroy;
LMsg.LoadFromFile('C:\Temp\1.eml');
У них пропущен байт 2Е.
Утюг (2006-10-25 15:27:00) [13]Сделал
Stream := TFileStream.Create('C:\Temp\1.eml', fmOpenReadWrite);
buf[0] := Char($0D);
buf[1] := Char($0A);
buf[2] := Char($0D);
buf[3] := Char($0A);
buf[4] := Char($2E);
buf[5] := Char($0D);
buf[6] := Char($0A);
Stream.Seek(Stream.Size-6, soFromBeginning);
Stream.Write(buf,7);
Stream.Destroy;
LMsg.LoadFromFile('C:\Temp\1.eml');
Anatoly Podgoretsky (2006-10-25 13:12:00) [14]Если есть LoadFromStream то загоняй туда стандатный файл и добавляй три байта в поток .CRLF (2E 0D 0A)
То что они добавили 6 байт это тоже не соответствует стандарту, если не будет работать как положено, то добавляй 7 или 5 байт
0D 0A 0D 0A 2E 0D 0A
Но это будет означать, что сообщение будет немного искажено, не соответствовать оригиналу.
Anatoly Podgoretsky (2006-10-25 13:09:00) [15]
> и сохранил его в файл. Затем в WinHex сравнил оба файла
> - в созданном файле последние 6 байт отличаются. Скопировал
> их в выгруженный и он сразу стал читаться.
Это кстати подтверждает, что это не .eml файл, а их самоизобретение и они нагло присвоили не то расширение ему.
Anatoly Podgoretsky (2006-10-25 13:08:00) [16]Я бы пошел наоборот, хотя бы для MIME перекодировать и это реально и обязательно к исполнению, а вот без заголовка чистое гадание, у меня сообщения идут пополам и КОИ и Виндоус.
Я понял, что это из руководства и если контекст честный, то в файле нет такой информации, эта информация сущесвует на транспортном уровне. Возможно контекст не полный или не точный или у них не стандартные .eml файлы
Утюг (2006-10-25 12:42:00) [17]
> Откуда ты решил, если не используется MIME то такой информации
> в письме нет и дальше начинается гадание, повезет/не повезет.
>
Исключительно визуально, т.е., согласен, свойство Charset для файлов без MIME будет пустым. Но хотя бы для непустого Charset перекодировать - и то польза.
> Откуда ты решил, что .eml файл имеет message terminator,
> нет его там по определению!
Так я выше привел цитату из мануала. А проверял так: с помощью того же TIdMessage создал сообщение с таким же содержимым, что и в выгруженном из ОЕ и сохранил его в файл. Затем в WinHex сравнил оба файла - в созданном файле последние 6 байт отличаются. Скопировал их в выгруженный и он сразу стал читаться.
Anatoly Podgoretsky (2006-10-25 12:29:00) [18]Утюг (25.10.06 11:44) [8]
Откуда ты решил, что .eml файл имеет message terminator, нет его там по определению!
Anatoly Podgoretsky (2006-10-25 12:25:00) [19]Subject содержит строку в кои8
Откуда ты решил, если не используется MIME то такой информации в письме нет и дальше начинается гадание, повезет/не повезет.
Утюг (2006-10-25 11:44:00) [20]Взято из описания метода TIdMessage.LoadFromFile:
Note: Both LoadFromFile and LoadFromStream are designed to handle messages written using the SaveToStream or SavedToFile methods in the Indy TIdMessage component. These methods create an encoded version of the message contents that matches the protocol tranmissions used when the message is transmitted using TIdSMTP including the message terminator characters (CRLF.CRLF). If you are trying to import .EML message files from MS Outlook Express, or another email client, make sure that the text file contains the message terminator sequence. An exception will be raised if LoadFromFile or LoadFromStream are used to load files that do not include the message terminator sequence.