Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ersatz von Indy mit Visual Studio 2015 und Mimekit/Mailkit (https://www.delphipraxis.net/191092-ersatz-von-indy-mit-visual-studio-2015-und-mimekit-mailkit.html)

Gerd01 10. Dez 2016 07:23

AW: Ersatz von Indy mit Visual Studio 2015 und Mimekit/Mailkit
 
Zitat:

Zitat von HolgerX (Beitrag 1355680)
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?

HolgerX 10. Dez 2016 09:22

AW: Ersatz von Indy mit Visual Studio 2015 und Mimekit/Mailkit
 
Zitat:

Zitat von Gerd01 (Beitrag 1355818)
Zitat:

Zitat von HolgerX (Beitrag 1355680)
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..

himitsu 10. Dez 2016 11:32

AW: Ersatz von Indy mit Visual Studio 2015 und Mimekit/Mailkit
 
Zitat:

Zitat von HolgerX (Beitrag 1355821)
Delphi-Quellcode:
except
end;

Wer möchte den ersten Stein werfen?

Zitat:

Zitat von HolgerX (Beitrag 1355821)
Delphi-Quellcode:
tmpStream.Position := tmpStream.Size -5;
tmpStream.Read(tmpBuffer,5);
if tmpBuffer <> #13#10'.'#13#10 then
  tmpStream.WriteBuffer(#13#10'.'#13#10,5);

Delphi-Quellcode:
if (tmpStringList.Count > 0) and (tmpStringList[tmpStringList.Count-1] <> '.') then
  tmpStringList.Add('.');
:zwinker:

HolgerX 10. Dez 2016 12:22

AW: Ersatz von Indy mit Visual Studio 2015 und Mimekit/Mailkit
 
Hmm..

Ich hab mal meine eigene Routine noch mal angeschaut...

eigentlich kann ich immer ein
Delphi-Quellcode:
tmpStringList.Add('.');
machen, bevor ich die Stingliste in den Stream packe.

Denn vorher werden aus allen '.' -> '..' somit würde die Abfrage nach dem '.' in der letzten Zeile eh immer false ergeben..

Ach.. Das mit Except end; war einfach nur Faulheit ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz