![]() |
INDY POP3
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Leute.
Hab da ein Großes Problem mit Indy und IDPOP3 und IDMessage. Ich lade mit POP3 E-MAils runter und kopiere den Anhang aus der E-Mail. Das Klappt auch ganz gut. Jedoch hab ich jetzt 3 E-Mails vor Augen gehabt, welche beim runterladen dazu führen, das ich eine leere Exception bekomme (Siehe Bild Exception.jpg) Hilft mir natürlich nicht viel und ein Try Except bringt auch nicht. Sobald die Zeile:
Code:
(ms: TIdMessage; pop3: TIdPOP3;)
pop3.Retrieve(727, ms);
ausgeführt wurde klappt meine Pop3 Komponente nicht mehr und ich muss das Programm neustarten. Wenn ich nur den Header der E-Mail runterlade klappt das auch super nur im BODY muss irgendetwas sein, was nicht ganz mit INDY Harmonisiert mit Outlook konnte ich die E-Mail nämlich runterladen und auch aus Outlook rausholen. (Siehe Problem.txt) (Für die Outlooksicht einfach in .eml umbennen). Weiß hier jemand rat? bin echt verzweifelt... Danke. Gruß Nico |
Re: INDY POP3
Kopiere die Unit IdPop3.pas in dein Projektverzeichnis.
Dann kanst du im Debugger per Einzelschritt in die Methode Retrieve() "reinsteppen" und schauen wo es klemmt. PS: gibt kein deutsches Wort für "reinsteppen"? |
Re: INDY POP3
OFF TOPIC: @shmia das deutsche Wort für "reinsteppen" ist "rein treten" SCNR
|
Re: INDY POP3
danke schonmal für den ansatz :)
das Problem ist in Zeile 449
Delphi-Quellcode:
ich weiss leider nicht in welche pas datei der da springen will O_o
ReceiveBody(AMsg);
|
Re: INDY POP3
Hallo,
gugst Du bitte hier: ![]() Wenn Deine angehangene Problem.txt im Ursprung genau so ist, wie angehangen, dann hast Du vermutlich das gleiche Problem. Die Indykomponenten erwarten eine standardkonforme Mail, was im realen Leben leider nicht immer gewährleistet ist. |
Re: INDY POP3
danke das scheint mir für ein anderes Problem sehr nützlich zu sein :)
aber ich hab jetzt die lösung für mein problem: in der IDCoder3to4:
Delphi-Quellcode:
hab festegestellt das er beim Base64 Decodieren einmal zu oft in die Prozedur geht und beim letzten mal
procedure TIdDecoder4to3.Decode(const AIn: string; const AStartPos: Integer = 1; const ABytes: Integer = -1);
var LIn : TIdBytes; LOut: TIdBytes; begin try if (AIn <> '') and (strstrcount(AIn,#0) = 0) then begin SetLength(LIn, 0); // Delphi 7.1 first edition warning bug SetLength(LOut, 0); // Delphi 7.1 first edition warning bug LIn := ToBytes(AIn); // if in dotnet, convert to serialisable format LOut := InternalDecode(LIn, AStartPos, ABytes); // Write out data to stream TIdStreamHelper.Write(FStream,LOut,ABytes); end; except; end; end; AIn den wert "#0'==='" hat. wofür steht eigentlich das #0? naja so läuft es erst einmal :) jetzt muss ich nur noch verschlüsseln können :) |
Re: INDY POP3
Hallo,
bevor Du hier Fehler in IDCoder3to4 oder ähnlichem suchst, probier bitte erst mal, ob zwei oder drei Leerzeilen am Ende der Mail hinzugefügt, das Problem nicht auch beheben. Möchte hier nicht ausschließen, dass Du über einen Folgefehler der "zu kurzen" Mail gestolpert bist. #0 könnte z. B. ein Leerstring sein, es ist das Endekennzeichen für z. B. PChars oder auch nullterminierte Zeichenfolgen. Ist die Mail zu kurz, dann könnte es sein, dass Indy über das Mailende hinausliest und dabei dann auf Zufallswerte oder eben auch #0 stößt. |
Re: INDY POP3
wie kann ich das den machen wenn die E-MAil noch aufm Server liegt ohne die INDYs zu ändern?
Ich mein das Passiert ja beim runterladen der E-Mail via POP3. Er schreibt ja schon das decodierte in die idmessage komponente. |
Re: INDY POP3
Hallo,
jo, da habe ich nicht weit genug (mit)gedacht, habe bei meinen Jobs halt immer die Mails als Textdateien, die ich dann verarbeite und keine Mails, die direkt vom Server kommen. Für eine Fehlerkorrektur "on the fly" beim Abholen der Mails vom Server, hab' ich auf die Schnelle keine Lösung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 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