Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Подскажите, куда копать (pop3)   Найти похожие ветки 

 
Утюг   (2006-10-24 21:07) [0]

Есть сохраненные на диск письма (ну, для примера, из ОЕ или Мыша). Чем можно из этих писем получить содержание служебных полей from, subject и т.д.?


 
Dmitrij_K   (2006-10-24 21:21) [1]

Indy
TIdMessage


 
Утюг   (2006-10-24 21:32) [2]

Спасибо, попробую разобраться.


 
Anatoly Podgoretsky ©   (2006-10-24 21:59) [3]

В сторону текстовых функций, это обычный текстовый файл


 
Утюг   (2006-10-25 10:38) [4]

С помощью TIdMessage реквизиты получил, но пришла другая беда: кодировка. Так, например,  поле Subject содержит строку в кои8 и, соответственно, отображается неверно.
Проблема №2 - письма, сохраненные из ОЕ и Мыша, TIdMessage не открывает, т.к. с его точки зрения файл оканчивается неверной последовательностью символов (Project Mail.exe raised exception class EIdReadTimeout with message "Read Timeout". ). Пока, для экспериментов, я обхожусь тем, что винхексом редактирую конец файла (0D 0A 0D 0A 2E 0D 0A в HEX), но это ведь не выход.


 
Утюг   (2006-10-25 10:50) [5]

Кодировку, вроде, победил. Проблема №2 пока висит.


 
Плохиш ©   (2006-10-25 11:00) [6]


> TIdMessage не открывает, т.к. с его точки зрения файл оканчивается
> неверной последовательностью символов
(Project Mail.exe
> raised exception class EIdReadTimeout with message "Read
> Timeout"
. ).

Это, что, такой вольный перевод сообщения об ошибке.

PS. У тебя проблемы с доступом к серверу.


 
Утюг   (2006-10-25 11:21) [7]

Какой-такой сервер? Я читаю файл на лок. диске LMsg.LoadFromFile("C:\Temp\4.eml");.
И это не перевод, а одна из причин возникновения такой ошибки.


 
Утюг   (2006-10-25 11:44) [8]

Взято из описания метода 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.


 
Anatoly Podgoretsky ©   (2006-10-25 12:25) [9]

Subject содержит строку в кои8
Откуда ты решил, если не используется MIME то такой информации в письме нет и дальше начинается гадание, повезет/не повезет.


 
Anatoly Podgoretsky ©   (2006-10-25 12:29) [10]

Утюг   (25.10.06 11:44) [8]
Откуда ты решил, что .eml файл имеет message terminator, нет его там по определению!


 
Утюг   (2006-10-25 12:42) [11]


> Откуда ты решил, если не используется MIME то такой информации
> в письме нет и дальше начинается гадание, повезет/не повезет.
>


Исключительно визуально, т.е., согласен, свойство Charset для файлов без MIME  будет пустым. Но хотя бы для непустого Charset перекодировать - и то польза.


> Откуда ты решил, что .eml файл имеет message terminator,
>  нет его там по определению!

Так я выше привел цитату из мануала. А проверял так: с помощью того же TIdMessage создал сообщение  с таким же содержимым, что и в выгруженном из ОЕ и сохранил его в файл. Затем в WinHex сравнил оба файла - в созданном файле последние 6 байт отличаются. Скопировал их в выгруженный и он сразу стал читаться.


 
Anatoly Podgoretsky ©   (2006-10-25 13:08) [12]

Я бы пошел наоборот, хотя бы для MIME перекодировать и это реально и обязательно к исполнению, а вот без заголовка чистое гадание, у меня сообщения идут пополам и КОИ и Виндоус.

Я понял, что это из руководства и если контекст честный, то в файле нет такой информации, эта информация сущесвует на транспортном уровне. Возможно контекст не полный или не точный или у них не стандартные .eml файлы


 
Anatoly Podgoretsky ©   (2006-10-25 13:09) [13]


> и сохранил его в файл. Затем в WinHex сравнил оба файла
> - в созданном файле последние 6 байт отличаются. Скопировал
> их в выгруженный и он сразу стал читаться.

Это кстати подтверждает, что это не .eml файл, а их самоизобретение и они нагло присвоили не то расширение ему.


 
Anatoly Podgoretsky ©   (2006-10-25 13:12) [14]

Если есть LoadFromStream то загоняй туда стандатный файл и добавляй три байта в поток .CRLF (2E 0D 0A)
То что они добавили 6 байт это тоже не соответствует стандарту, если не будет работать как положено, то добавляй 7 или 5 байт
0D 0A 0D 0A 2E 0D 0A
Но это будет означать, что сообщение будет немного искажено, не соответствовать оригиналу.


 
Утюг   (2006-10-25 15:27) [15]

Сделал
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");


 
Утюг   (2006-10-25 15:40) [16]

Слегка соврал (впрочем, не смертельно)
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Е.


 
Anatoly Podgoretsky ©   (2006-10-25 16:35) [17]

Такой байт не входит в состав формата .eml
Ты умолчал, можно ли использовать LoadFromStream, а то как то некрасиво записывать в файл и затем читать его.


 
Утюг   (2006-10-25 17:14) [18]

Но без этого байта файл не открывается.
LoadFromStream использовать не получилось.


 
Megabyte ©   (2006-10-26 12:06) [19]

Отправляю почту с помощью SMTP.
Объясните, где и какую кодировку(или еще что) надо установить(просматриваю отправленные через Дельфи письма в OutLook)?

Потыкался во все свойства компонента TIdMessage, ничего путного не поучилось.
Там есть свойство CharSet, но оно может принимать значения неизвестных мне кодировок.
Копал свойства Encoding, ContentTransferEncoding и т.д. Если их и надо использовать, то как, я не понимаю.

Показывает русский шрифт, но там вместо слов набор других русских букв?!


 
Anatoly Podgoretsky ©   (2006-10-26 12:32) [20]

Их все надо использовать, а недопонимание из-за того, что не читаешь первоисточник, просмотреть все rfc посвященые MIME и почты. В конце концов хотя бы посмотреть образцы различных писем, это делается не выходя из ОЕ и если это тяжело, то письма всегда можно сохранить в формате .eml на диск и далее любой текстовый редактор.


 
Megabyte ©   (2006-10-26 13:04) [21]

Спасибо за направление на путь истиный. :)
Посмотрел свое письмо, кот. создаю через Дельфи(1), и письмо(на норм. русском), кот. послал со своего ящика на Яндексе(2):
Content-Type: text/plain;
charset="KOI8-R"
Content-Transfer-Encoding: 8bit

Также установил свойства в Дельфи.

Но вот в чем проблема: слово "Привет" отображается в файле 2 так: "рТЙЧЕФ"(т.е. оно потом перекодируется, конечно, в "Привет").
Как мне сделать так, чтобы можно было вводить норм. слово на русском в тело письма в Дельфи? Все же читать про MIME?


 
Anatoly Podgoretsky ©   (2006-10-26 13:13) [22]

А это слово где?
Письмо оно состоит из частей их как минимум две, и у каждой части свои независимые кодировки и транспортные упаковки.


 
Megabyte ©   (2006-10-26 13:19) [23]

Слово внутри тела(body).
Я ж говорю, сделал все свойства в Дельфе также, как в письме, отправленном мною с Яндекса. Только, открыв письмо блокнотом, увидел, что слово "Привет" выглядит так: рТЙЧЕФ
Но в OE оно отображается как "Привет".


 
Anatoly Podgoretsky ©   (2006-10-26 13:22) [24]

Вот это конкретно и могу тебя успокоить все работает правильно!
Блокнот показывает в своей текущей кодировке, а ОЕ перекодирует, если у него для этого есть информация, в данном случае есть и он перекодировал это из КОИ в Юникод или Windows-1251


 
Megabyte ©   (2006-10-26 13:33) [25]


> Anatoly Podgoretsky ©  (26.10.06 13:22) [24]

я понял, что правильно, только интересует, как мне в Дельфи задавать нужный текст, желательно на русском?
А то надо мне, например, слово "Неправильные". Мне надо отправить с Яндекса письмо с этим словом, посмотреть его в текущей кодировке блокнота: "оЕРТБЧЙМШОЩЕ", и потом вставить в код, чтобы он потом преобразовал слово.
Я не пойму, как мне настроить приложение так, чтобы в самой Дельфи вводить в тело слово "Неправильные", а не закодированную белиберду? :)


 
Megabyte ©   (2006-10-26 13:43) [26]

Так, если перенастроить в OE на кодировку Кириллица(windows) и в Дельфи у TIdMessage.Charset := Windows-1251, то письмо(тело) отображается так, как пишется.
Почему, нельзя сделать так, чтобы письмо(тело) отображалось так как пишется при кодировке по умолчанию в OE: KOI8-R?


 
Anatoly Podgoretsky ©   (2006-10-26 15:48) [27]


> Почему, нельзя сделать так, чтобы письмо(тело) отображалось

А так оно и есть, как написано так и пишется, если сумеешь перестроить окно на КОИ то увидишь нормально.
А что Билл Гейтса не любишь и поэтому Виндоус-1251 применять не хочешь. А может тебе пока с сетями не работать пока не прочитаешь RFC?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.045 c
2-1162201296
Darkwing
2006-10-30 12:41
2006.11.12
Как уменьшить иконку, полученную из ДЛЛ?


4-1151484732
Arazel
2006-06-28 12:52
2006.11.12
Как получить физическую геометрию жесткого диска по Win9x


15-1161780471
ocean
2006-10-25 16:47
2006.11.12
Разрезать видео


2-1161686802
Krants
2006-10-24 14:46
2006.11.12
Вызвать Hint


15-1161607601
Vitality
2006-10-23 16:46
2006.11.12
Работа с таблицей Exel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский