How to use
for i := 0 to mailboxList.Count - 1 do
begin
mailboxName := TImapUtf7Encoder.Decode(mailboxList[i]);
end;
Implementation
class function TImapUtf7Encoder.Decode(const AValue: string): string;
var
n, h, t, k: Integer;
begin
Result := '';
n := Length(AValue);
h := 1;
while (h <= n) do
begin
t := System.Pos('&', AValue, h);
if (t <= 0) then
begin
t := n + 1;
end;
Result := Result + System.Copy(AValue, h, t - h);
h := t + 1;
if (h > n) then Break;
t := System.Pos('-', AValue, h);
if (t <= 0) then
begin
t := n + 1;
end;
k := t - h;
if (k = 0) then
begin
Result := Result + '&';
end else
begin
Result := Result + DecodeBase64Imap(System.Copy(AValue, h, k));
end;
h := t + 1;
end;
end;
class function TImapUtf7Encoder.DecodeBase64Imap(const AValue: string): string;
var
enc: TclEncoder;
b: TBytes;
begin
enc := TclEncoder.Create(nil);
try
enc.EncodeMethod := cmBase64;
b := enc.DecodeBytes(StringReplace(AValue, ',', '/', [rfReplaceAll]), 'UTF-7');
Result := TclTranslator.GetString(b, 'UTF-16BE');
finally
enc.Free();
end;
end;
Article ID: 102, Created: March 30 at 5:41 PM, Modified: March 30 at 5:41 PM