Hierfür hatte ich mir für einen einfachen EML-Viewer eine Lade-Routine geschrieben, die diese Fehler vor dem Einlesen durch
INDY beseitigt..
Vieleicht kannst Du Deine Laderoutine hier zur Verfügung stellen?
Sorry hätte ich auch direkt machen können..
Delphi-Quellcode:
function LoadEMFFileToMsg(AFileName:
string;Msg : TIdMessage):boolean;
var
tmpStringList : TStringList;
tmpStream : TMemoryStream;
tmpBuffer :
array[0..4]
of AnsiChar;
i : integer;
begin
result := false;
try
if UpperCase(ExtractFileExt(AFileName)) = '
.EML'
then begin
tmpStringList := TStringList.Create;
try
tmpStringList.LoadFromFile(AFileName);
// Bugfix mit '.' statt '..' wenn durch Zeilenumbruch der '.' alleine in der Zeile steht
// Microsoft hällt sich nicht RFC und speichert dann nur mit '.' statt '..'!
for i := 0
to tmpStringList.Count -1
do begin
if tmpStringList[i] = '
.'
then tmpStringList[i] := '
..';
end;
tmpStream := TMemoryStream.Create;
try
tmpStringList.SaveToStream(tmpStream);
tmpStream.Position := tmpStream.Size -5;
tmpStream.
Read(tmpBuffer,5);
if tmpBuffer <> #13#10'
.'#13#10
then
tmpStream.WriteBuffer(#13#10'
.'#13#10,5);
tmpStream.Position := 0;
Msg.LoadFromStream(tmpStream);
result := true;
finally
tmpStream.Free;
end;
finally
tmpStringList.Free;
end;
end;
except
end;
end;
Hinweis:
Diese Routine benutze unter Delph 6, es könnte somit Probleme mit
Unicode in neueren Delphis geben
Indy 10.
Hiermit bekomme ich eigendlich alle EMLs von Outlook oder Thunderbird geladen..