Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с IMAP INDY 9.0


ser ©   (2003-06-17 12:49:00) 

Мастера помогите плиз.
Есть такая проблема:
Конекчюсь к почтовому серверу(Linux): забираю список всех папок, проблема начинает возникать с русскими папками, я их получаю в непонятном виде (преобразование кодировок тоже не помогает). Тоже происходит и с получением темы письма.
Например название папки:
&BCEENQRABDMENQQ5-(serg) что в оригинале Мичкивский Сергей(serg)
Например тема:
=?koi8-r?B?8MXSxdDJ09ggy8/N0NjA1MXSz9c=?= что в оригинале звучит Перепись компьютеров.
Может все дело в настройках компонента.
Кто может помогите очень нужно.....


s_ser   (2003-07-07 10:58:00) [1]

to MikeP
Скажем так с перекодировкой Q-quoted printable я разобрался осталось решить проблему с BASE-64. Твой последний пример решит ее или нет.


MikeP   (2003-07-02 18:17:00) [2]

в модуле IdCoderHeader есть ф-я DecodeHeader
модифицируешь ее след. образом:
после

if encodingstartpos = 0 then
encodingstartpos:=PosStartAt("=?WINDOWS", UpperCase(Header),1);

добавляешь

if encodingstartpos = 0 then
encodingstartpos:=PosStartAt("=?KOI", UpperCase(Header),1);

далее
после
if AnsiSameText(HeaderCharSet, "ISO-2022-JP") then {Do not Localize}
begin
substring := Decode2022JP(s)
end else

добавляешь

if AnsiSameText(HeaderCharSet,"koi8-r") then
begin
subString:=DecodeKOI(s);
end else

ф-ю типа DecodeKOI которая конвертит строку koi8 в строку win1251 можно найти легко, например в кладовке.


vuk   (2003-07-02 13:56:00) [3]

to s_ser:
Насчет перекодировки темы. Это строка в формате MIME. Настройки компонента здесь не помогут, он не умеет работать с русскими кодировками, поэтому нужно писать парсер для таких строк.
Что есть что в этой строке:

=? - сигнатура строки
koi8-r - набор символов (может быть не только koi8-r)
? - разделитель
B - кодировка (B-base64, Q-quoted printable)
? - разделитель
8MXSxdDJ09ggy8/N0NjA1MXSz9c= - собственно строка в кодировке base64
?= - конец блока

Чтобы значение строки, нужно выделить данные и раскодировать их из base64. После этого получится строка в koi8-r, которую нужно будет преобразовать в Win1251.
Да, еще. Учтите, что в теме может быть несколько блоков, которые нужно будет сливать в одну строку.


s_ser   (2003-07-02 13:35:00) [4]

Спасибо за помощь, а как насчет перекодировки темы письма


MikeP   (2003-06-18 14:01:00) [5]

ms:TMemoryStream и ms.Size=0 лишние


gedd   (2003-06-18 11:10:00) [6]

Неработает эта функция!


MikeP   (2003-06-17 13:17:00) [7]

function TIdIMAP4.DecodeMailBoxName(AName: String): String;
var
outStr:String;
curPos:Integer;
minusPos:Integer;
ampPos:Integer;
ms:TMemoryStream;
bufSize:Integer;
buf:Pointer;
codedStr:String;
begin
outStr:="";
curPos:=1;
result:="";
while curPos


Наверх

Титульная страница Поиск, карта сайта Написать письмо