![]() |
Pop3 Abfrage von 30 Mails gehen 10 verloren :(
Hallo ich schreibe gerade an einen Email Clienten,
es funzt soweit auch alles bis auf folgendes. Das Programm hat eine Mail.XML wo es die wichtigesten Daten (Name, EMail, Datum, Uhrzeit, Betreff, Dateinamen) drin speichert, der Header und der Text kommen in extra Datein. Komisch ist der Eintrag in die XML Datenbank befindet sich unter dem wo die Datein gespeichert werden. Es werden alle 29 Emails in die XML geschrieben ABER Datein sind es nur 20-22. Es gehen also ca. 10 Mails verloren...
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var index : integer; i, z: integer; filename: string; speichern: string; begin try ClientDataSet1.Active := False; ClientDataSet1.IndexFieldNames := 'Konto'; ClientDataSet1.Filtered := True; ClientDataSet1.LoadFromFile(extractfilepath(application.exename)+'/TekKonten.xml'); ClientDataSet1.Open; while not ClientDataSet1.Eof do begin IdPOP31.Host := ClientDataSet1.FieldByName('Pop').AsString; IdPOP31.Username := ClientDataSet1.FieldByName('Username').AsString; IdPOP31.Password := ClientDataSet1.FieldByName('Password').AsString; IdPOP31.Connect; for index := 1 to IdPOP31.CheckMessages do begin IdPOP31.Retrieve(index,idMessage1); Memo1.Text := IdMessage1.Headers.Text; for Z := 0 to Memo1.Lines.Count - 1 do begin if Pos('Message-Id:', Memo1.Lines[Z]) > 0 then begin speichern := Memo1.Lines[Z]; delete(speichern,1,pos('<',speichern)); delete(speichern,pos('@',speichern),pos('>',speichern)); end; end; Memo1.Lines.SaveToFile(Progverz+'/Nachrichten/'+speichern+'h.txt'); IdMessage1.Body.SaveToFile(Progverz+'/Nachrichten/'+speichern+'.html'); IdMessage1.Clear; end; IdPOP31.Disconnect; ClientDataSet1.Next; end; ClientDataSet1.Close; except ShowMessage(' Keine Datenbank gefunden, bitte importieren!'); end; if TreeView1.Selected.AbsoluteIndex > 0 then begin try ClientDataSet2.Active := False; ClientDataSet2.IndexFieldNames := 'Id'; ClientDataSet2.Filter := 'Folder = '+QuotedStr(TreeView1.Selected.Text); ClientDataSet2.Filtered := True; ClientDataSet2.LoadFromFile(extractfilepath(application.exename)+'/TekOrdner.xml'); ClientDataSet2.Open; while not ClientDataSet2.Eof do begin try ClientDataSet3.Active := False; ClientDataSet3.IndexFieldNames := 'Id'; ClientDataSet3.Filter := 'Folder = '+QuotedStr(ClientDataSet2.FieldByName('Id').AsString); ClientDataSet3.Filtered := True; ClientDataSet3.LoadFromFile(extractfilepath(application.exename)+'/TekMail.xml'); ClientDataSet3.Open; Grid1.Clear; Grid1.Cells[0,0] := ''; Grid1.Cells[1,0] := TreeView1.Selected.Text; Grid1.Cells[2,0] := 'erhalten am:'; Grid1.Cells[3,0] := ''; Grid1.RowCount := 2; i := 0; while not ClientDataSet3.Eof do begin i := i+1; Grid1.Cells[0,i] := ''; if ClientDataSet3.FieldByName('Name').AsString = '' then Grid1.Cells[1,i] := ClientDataSet3.FieldByName('Email').AsString+' '+'[b]'+ClientDataSet3.FieldByName('Subject').AsString+'[/b]' else Grid1.Cells[1,i] := ClientDataSet3.FieldByName('Name').AsString+' '+'[b]'+ClientDataSet3.FieldByName('Subject').AsString+'[/b]'; Grid1.Cells[2,i] := ClientDataSet3.FieldByName('Date').AsString+' [b]'+ClientDataSet3.FieldByName('Time').AsString+'[/b]'; Grid1.Cells[3,i] := ClientDataSet3.FieldByName('Id').AsString; Grid1.AddRow; ClientDataSet3.Next; end; ClientDataSet3.Close; Grid1.RowCount := Form1.Grid1.RowCount-1; Grid1.FixedRows := 1; Grid1.SortByColumn(3); except ShowMessage(' Keine Datenbank gefunden, bitte importieren!'); end; ClientDataSet2.Next; end; ClientDataSet2.Close; except ShowMessage(' Keine Datenbank gefunden, bitte importieren!'); end; end; end; |
Re: Pop3 Abfrage von 30 Mails gehen 10 verloren :(
Was mir auffällt:
Delphi-Quellcode:
Ich bin mir ziemlich sicher, dass der Index von 0 bis CheckMessages-1 läuft. Also du läßt die erste Nachricht weg, läßt die Schleife aber bis zu einer Nachricht laufen, die es nicht mehr gibt. Eigentlich müsste es an dieser Srtelle bei dir knallen.
for index := 1 to IdPOP31.CheckMessages do
Ansonsten, debuggen und das ganze mal in Einzelschritten durchgehen. |
Re: Pop3 Abfrage von 30 Mails gehen 10 verloren :(
Ich kenn mich da nicht weiter aus, aber kann es sein, das "index" - rein vom syntax her - ein "reservierter Name ist und nicht als integer verwandt werden kann/darf?
|
Re: Pop3 Abfrage von 30 Mails gehen 10 verloren :(
Das kommt hinzu. Ob es dadurch zu Konflikten kommt, kann ich nicht sagen, es kann gut gehen, muss aber nicht. Deswegen sollte man es tunlichst vermeiden Reservierte Wörter als Variablennamen zu benutzen.
|
Re: Pop3 Abfrage von 30 Mails gehen 10 verloren :(
also "index" hab ich nun in "zahl" umgewandelt...
Aber zahl := 1 muss schon stehen bleiben, da er sonst einen leeren Eintrag und eine leere Datei erzeugt. Aber es geht immer noch nicht... Es gehen immer noch ca 10 Mails verloren *G* |
Re: Pop3 Abfrage von 30 Mails gehen 10 verloren :(
Hi Teklab,
debugge doch mal die Zeile wo Du speichern ermittelst. Vielleicht sind ja in Deinen Testmails Msg-IDs mehrfach vorhanden. Zu Sicherheit könntest Du noch ein FormatDateTime an speichern anhängen mit millisekunden. Oder prüfe vorher mit filexexists in einer Schleife ob die Ausgabedatei bereits existiert und hänge dann eine laufende Nummer an das speichern. |
Re: Pop3 Abfrage von 30 Mails gehen 10 verloren :(
Nein das wars leider auch nicht. Ich speicher jetzt
alles in einer Datebank aber trotzdem gehen einige Mails verloren... Es kommt mir fast so vor als wenn die Einträge zulang dauern und er deswegen was überspringt. Also anders kann es ja nun fast ned mehr sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:13 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