Hallo
hab das Problem bereits selber gelöst.
UT8ToWideString bringt in diesem Fall auch nichts, da es ja nur eine Codierung ist um es zu versenden
@Samashy
Das Problem mit der ISO Codierung kannst du lösen, indem du in der
Unit IdCoderHeader in der Methode DecodeHeader diesen Block änderst:
Code:
if EncodingFound then
begin
encodingendpos:=PosIdx('?=', UpperCase(Header),encodingendpos+1); {Do not Localize}
if encodingendpos > 0 then
begin
for i := LEncodingStartPos to encodingendpos-1 do begin
//if CharIsInSet(Header, i, Whitespace) then begin <-- diese Zeile
if CharIsInSet(Header, i, [#9,#10,#13]) then begin <-- durch diese ersetzen
EncodingFound := false;
break;
end;
end;
Dadrauf achten, dass du den Block mit dem "encodingendpos:=PosIdx('?=', UpperCase(Header),encodingendpos+1);" nimmst.
Da ist noch ein weiterer, der fast genauso aussieht.
Das Problem mit den UTF8 Subjects ist da nicht ganz so leicht zu lösen, da
Indy hat der DecodeHeader stelle dort selber nichts vorsieht. Allerdings besitzt
Indy eine Klasse um diese Strings (jedenfalls ohne den Header) zu decodieren.
Ich habe mir deswegen zwei Methoden gebaut:
Code:
function MailsGetSubject(Subject: String): String;
var
Decoder : TIdDecoderQuotedPrintable;
TextAnsi : String;
begin
Result:=Subject;
if Pos('=?utf-8',Subject)<>0 then
begin
Decoder:=TIdDecoderQuotedPrintable.Create;
try
Result:=DeleteUTF8ControlStrings(Subject);
Result:=Decoder.DecodeString(Result);
TextAnsi:=UTF8ToAnsi(Result);
if Length(TextAnsi)>0 then Result:=TextAnsi;
finally
FreeAndNil(Decoder);
end;
end;
end;
function DeleteUTF8ControlStrings(Text: String): String;
var
Encoded : String;
Dump : String;
StartPos : Integer;
EndPos : Integer;
begin
Encoded:='';
Dump:=Text;
while Pos('=?UTF-8',StrUpper(Dump))<>0 do
begin
StartPos:=Pos('=?UTF-8',StrUpper(Dump))+10;
EndPos:=Pos('?=',StrUpper(Dump));
Encoded:=Encoded+Copy(Dump,StartPos,EndPos-StartPos);
Dump:=Encoded+Copy(Dump,EndPos+3,Length(Dump)-(EndPos+2));
end;
Result:=StrTrim(StrChangeCh(Encoded,'_',' '));
end;
Im Uses Block muss man dafür die
Unit IdCoderQuotedPrintable zusätzlich einbinden.
Vielleicht hilfts ja wem
Kleine Anmerkung:
DeleteUTF8ControlStrings löscht die =?utf-8?Q? und ?= Zeichen und baut auch mehrere zusammengesetzte utf8 codierte Strings wieder zu einem Zusammen. Dabei wird das ?Q? bzw ?B? ignoriert. ?B? bedeuted, dass das Subject noch zusätzlich Base64 Decodiert wird.
greetz
Steffen