Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi INDY POP3 (https://www.delphipraxis.net/133000-indy-pop3.html)

itashadow 23. Apr 2009 14:37


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:
pop3.Retrieve(727, ms);
(ms: TIdMessage; pop3: TIdPOP3;)

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

shmia 23. Apr 2009 16:44

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"?

Gargoyl 23. Apr 2009 18:22

Re: INDY POP3
 
OFF TOPIC: @shmia das deutsche Wort für "reinsteppen" ist "rein treten" SCNR

itashadow 27. Apr 2009 13:32

Re: INDY POP3
 
danke schonmal für den ansatz :)

das Problem ist in Zeile 449

Delphi-Quellcode:
ReceiveBody(AMsg);
ich weiss leider nicht in welche pas datei der da springen will O_o

nahpets 27. Apr 2009 13:53

Re: INDY POP3
 
Hallo,

gugst Du bitte hier: Indy tidmessage text auslesen und beachte dort die Teile, bei denen es um das korrigieren von fehlerhaften Mails geht.

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.

itashadow 27. Apr 2009 14:40

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:
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;
hab festegestellt das er beim Base64 Decodieren einmal zu oft in die Prozedur geht und beim letzten mal
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 :)

nahpets 28. Apr 2009 08:41

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.

itashadow 28. Apr 2009 12:19

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.

nahpets 28. Apr 2009 14:41

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 20:40 Uhr.

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