![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с 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