Эта кодировка называется IMAP-UTF7.
Решение проблемы РАСКОДИРОВКИ было найдёно на sql.ru, за что автору огромное спасибо.
Однако это решило лишь одну проблему, как получить список русских папок. К сожалению, выбрать эти папки (IdImap.SelectMailBox) у меня пока никак не получается, соотвественно и работать с ними нормально - тоже. Причём не получается их выбрать ни указав название ящика (с русскими буквами), ни передав в качестве параметра название ящика полученное с сервера (вида &BBgEQQRFBD4ENARPBEkEOAQ1-).
function StringToWideStringEx(const S: string; CodePage: Word): WideString;
var
InputLength,
OutputLength: Integer;
begin
InputLength := Length(S);
OutputLength := MultiByteToWideChar(CodePage, 0, PAnsiChar(AnsiString(S)), InputLength, nil, 0);
SetLength(Result, OutputLength);
MultiByteToWideChar(CodePage, 0, PAnsiChar(AnsiString(S)), InputLength, PWideChar(Result), OutputLength);
end;
function UTF7ToWideString(const S: string): WideString;
begin
Result := StringToWideStringEx(S, CP_UTF7);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I:integer;
SL:TStringList;
M,G:string;
begin
Memo2.Clear;
Memo3.Clear;
SL:=TStringList.Create;
Imap.Connect(True);
try
Imap.ListMailBoxes(SL);
for I := 0 to SL.Count - 1 do
begin
Memo3.Lines.Add(SL.Strings[i]);
Application.ProcessMessages;
M := StringReplace(SL.Strings[i], '&', '+',[rfReplaceAll, rfIgnoreCase]);
G := StringReplace(M, ',', '/',[rfReplaceAll, rfIgnoreCase]);
Memo2.Lines.Add(UTF7ToWideString(G));
end;
finally
SL.Free;
end;
end;
|