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

Вниз

Работа с IMAP INDY 9.0   Найти похожие ветки 

 
ser   (2003-06-17 12:49) [0]

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


 
MikeP   (2003-06-17 13:17) [1]

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<=Length(AName) do
begin
ampPos:=Pos("&",Copy(AName,curPos,Length(AName)-curPos+1));
if ampPos<=0 then ampPos:=Length(AName)+1 else ampPos:=ampPos+curPos-1;
outStr:=outStr+Copy(AName,curPos,ampPos-curPos);
curPos:=ampPos;
if curPos<=Length(AName)then
begin
minusPos:=Pos("-",Copy(AName,curPos,Length(AName)-curPos+1));
if minusPos<=0 then minusPos:=Length(AName)+1
else minusPos:=minusPos+curPos-1;
ms.Size:=0;
codedStr:=StringReplace(StringReplace(Copy(AName,curPos,minusPos-curPos+1),",","/",[rfReplaceAll]),"&","+",[rfReplaceAll]);
bufSize:=MultiByTeToWideChar(CP_UTF7,0,@codedStr[1],Length(codedStr),nil,0);
GetMem(buf,(bufSize+1)*sizeof(WideChar));
ZeroMemory(buf,(bufSize+1)*sizeof(WideChar));
try
if MultiByTeToWideChar(CP_UTF7,0,@codedStr[1],Length(codedStr),PWideChar(buf),bufSize)=0 then
RaiseLastWin32Error;
outStr:=outStr+WideCharToString(PWideChar(buf));
finally
FreeMem(buf);
end;
curPos:=minusPos+1;
end
end;
result:=outStr;
end;


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

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


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

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


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

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


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

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

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

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



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

в модуле 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 можно найти легко, например в кладовке.


 
s_ser   (2003-07-07 10:58) [7]

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



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

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

Наверх




Память: 0.46 MB
Время: 0.007 c
3-24310
Silla
2003-08-17 13:57
2003.09.08
Отчет в Excel


6-24607
Slaga
2003-06-21 15:45
2003.09.08
Сканирование удаленного компа, а точнее


1-24545
Jineura
2003-08-26 16:44
2003.09.08
tSendMail в Delphi7


14-24670
Lamer_of_Delphi
2003-08-20 11:24
2003.09.08
Глюк!!!


1-24469
Karburator
2003-08-27 16:28
2003.09.08
компонент ShellListView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский