![]() |
Indy TidMessage LoadFromFile-Fehler
Hallo,
ich habe mir ein Programm gebastelt, das mittels TIDMessage und LoadFromFile aus einem Verzeichnis, in dem ich meine Mails sichere, die Mails mit Datum und Betreff einlesen kann. Wenn jedoch eine Mail nicht geladen werden kann, hängt sich der Thread an der Stelle LoadFromFile auf. Gibt es eine Möglichkeit, dass ich vorher prüfen kann, ob <TiDMessage-Object>.LoadFromFile(...) erfolgreich ausgeführt werden kann? |
Re: Indy TidMessage LoadFromFile-Fehler
Hallo,
du könntest mit FileExists vorher prüfen ob die Datei vorhanden ist. Grüße Klaus |
Re: Indy TidMessage LoadFromFile-Fehler
Die Datei ist vorhanden und ich kann sie auch via Doppelklick öffnen. Nur LoadFromFile hat Probleme und hängt sich auf. Bis jetzt konnte ich nur eine Mail ausmachen, wo es Probleme gibt, allerdings habe ich das Programm bis jetzt auch nur auf einen Bruchteil meiner gesicherten Mails angesetzt. Deswegen möchte ich diesen Fehler gern codetechnisch lösen.
|
Re: Indy TidMessage LoadFromFile-Fehler
Hallo,
Mails müssen am Ende immer eine oder zwei Leerzeilen und 'ne Zeile, in der nur ein Punkt ist, haben (schau mal in die Spezifikation RFC ichweissleidernichwas - siehe unten). Wenn die Leerzeile(n) und/oder Punkt am Ende fehlen, kommt idMessage (nach meiner Erfahrung) mit den Dateien nicht zurecht (da ja noch nicht die vollständige Mail empfangen wurde). Schau mal nach, ob das Problem bei allen Mails passiert oder nur bei einigen und ob Du durch anhängen von Leerzeilen an dem Problem vorbeikommst. In meinem Programm mache ich das so:
Delphi-Quellcode:
...
sl := TStringList.Create; st := TMemoryStream.Create; Try Try sFileName := sr.FindData.cFileName; sl.LoadFromFile(sDirectory + '\' + sFileName); sl.Add(''); sl.Add('.'); sl.Add(' '); sl.SaveToStream(st); st.Position := 0; Try IdMessage.LoadFromStream(st); except on e : Exception do Begin stb2.SimpleText := sDirectory + '\' + sFileName + ' - ' + e.Message; end; end; ... Zitat:
|
Re: Indy TidMessage LoadFromFile-Fehler
Danke für die Antwort :). Das werde ich mal prüfen.
zusatz: Und siehe da, besagter Mail fehlt die Lehrzeile am Ende der Mail. |
Re: Indy TidMessage LoadFromFile-Fehler
In der Borland-Hilfe zum Developer Studio 2006 ist das direkt falsch erklärt. Da steht:
Zitat:
|
Re: Indy TidMessage LoadFromFile-Fehler
Hallo,
kannst Du mal so eine Mail, die hakt, hier anhängen? Würde mir das dann mal anschauen und ggfls. mit meinem (pseudo)-Spamfilter testen. Kannst aber auch mal so'ne Mail per PN schicken. |
Re: Indy TidMessage LoadFromFile-Fehler
Eine PN mit der Mail als Anhang ist unterwegs.
|
Re: Indy TidMessage LoadFromFile-Fehler
Hallo,
habe mir die Mail mal angeschaut und mit meinem Programm auch ein Problem gehabt. Die Mail enthält einen Anhang, der von IDMessage decodiert wird, hierbei tritt der Fehler "Ungleichmäßige Größe in DecodeToStream" auf und anschließend gibt es dann noch 'ne Zugriffsverletzung. Das Problem konnte ich dadurch lösen, dass ich am Ende der Datei zwei Leerzeilen eingefügt habe. Der Mailanhang hat in etwa diese Form:
Code:
Befindet sich am Ende kein Zeilenumbruch, so wird das Ende von IDMessage nicht erkannt, was zu dem von Dir beobachteten Problem führt. Prinzipiell ist es kein Fehler, wenn Du die Mails in der von mir in Post #4 beschriebenen Form lädst. Du kannst dort getrost grundsätzlich zwei Leerzeilen anhängen, zuviel ist kein Problem, nur zuwenig.
------ =_DIRMAIL_1_N8NN3L9GM4636JHO
Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: BASE64 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs ... ICA8L3RyPgo8L3RhYmxlPgoJPC9ib2R5Pgo8L2h0bWw+Cg0K ------ =_DIRMAIL_1_N8NN3L9GM4636JHO-- |
Re: Indy TidMessage LoadFromFile-Fehler
Hallo,
was mir gerade noch auffällt: Wenn der Virenscanner den Anhang beim Dekodieren durch IDMessage als verseucht erkennt, tritt der Fehler "Ungleichmäßige Größe in DecodeToStream" auch auf, da er dem Programm die beim Dekodieren erstellte Datei "unterm Hintern" wegzieht. Beim Dekodieren werden die Anhänge im Tempverzeichnis abgelegt, mit Namen in der Form "ind*.tmp". Da diese Dateien nicht immer ordentlich aufgeräumt werden, sollte man hier ab und an mal "nacharbeiten". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 Uhr. |
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