Autor Beitrag
chritzl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

WIN 98 - bald Linux! :-)
Delphi 1, 4, 6
BeitragVerfasst: Mo 09.02.04 20:28 

    Folgendes Problem:

    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    For i := idpop31.checkmessages downto 0 do
       begin
         IdPOP31.Retrieve(i, IdMessage1);
         memo1.lines.add('Betreff: '+IdMessage1.Subject);
       end;


    Angenommen ich hab 6 eMails aufm POP3, dann wird von der 6. Mail der Betreff 6x übertragen (eigentlich blödsinnig, reicht ja 1x).
    Ich möchte aber von jeder Mail den Betreff!

    Wo könnte der Fehler liegen???

greetz chris


Zuletzt bearbeitet von chritzl am Mi 11.02.04 18:14, insgesamt 1-mal bearbeitet
bug0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win2000, Xp, Vista
Delphi 2006, 2009
BeitragVerfasst: Di 10.02.04 16:00 
Hallo,

so wie es aussieht, machst du in deiner Schleife eine "Runde" zuviel.

Versuchs doch mal mit einem der folgenden Beispiele...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
For i := Pred(IdPop31.CheckMessages) downto 0 do 
begin 
  IdPop31.Retrieve(i, IdMessage1);
  Memo1.Lines.Add('Betreff: '+IdMessage1.Subject); 
end;

oder
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
For i := IdPop31.CheckMessages downto 1 do 
begin 
  IdPop31.Retrieve(i, IdMessage1);
  Memo1.Lines.Add('Betreff: '+IdMessage1.Subject); 
end;


Da ich mir nicht ganz sicher bin, ab welchem Index Indy die Nachrichten ablegt habe ich zwei Beispiele gepostet. Dürfe aber ab Index 1 sein und somit das zweite Beispiel.

Viel Erfolg!!
chritzl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

WIN 98 - bald Linux! :-)
Delphi 1, 4, 6
BeitragVerfasst: Di 10.02.04 18:36 
Ich hab das auch schon probiert (runterzählen bis 1), hat aber auch nicht funktioniert!
Andersrum genauso: Wenn ich von "0 to IdPOP31.CheckMessages" zähle gehts auch nicht...

_________________
Geld ist rund und rollt weg, Bildung bleibt! Heine
Now known as NuCHiLL
bug0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win2000, Xp, Vista
Delphi 2006, 2009
BeitragVerfasst: Di 10.02.04 19:44 
Zitat:
Wenn ich von "0 to IdPOP31.CheckMessages" zähle gehts auch nicht...

Deine Schleife ist immer noch zu lang...

CheckMessages ist bei dir 6.
Von 0 bis 6 sind es aber 7 Schritte.
Du hast aber nur 6 Nachrichten zum Auslesen.
Richtig wäre also "0 to (IdPOP31.CheckMessages - 1)"´

Oder?
chritzl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

WIN 98 - bald Linux! :-)
Delphi 1, 4, 6
BeitragVerfasst: Di 10.02.04 19:55 
korrekt!
Es ist aber egal bis wohin ich zähle, er zeigt nur den Betreff der 1. bzw. letzten Mail und das ganze sooft wie die Anzahl der Mail...

Probiers mal aus...

_________________
Geld ist rund und rollt weg, Bildung bleibt! Heine
Now known as NuCHiLL
Ungfmaster
Hält's aus hier
Beiträge: 9


D6 Prof
BeitragVerfasst: Mi 11.02.04 15:06 
Hi,
mit der indy pop3 hab ich auch schonmal rumgespielt

Mit IdPOP31.CheckMessages erhälst du die anzahl der emails auf dem server
der index fängt bei 1 an und geht bis IdPOP31.CheckMessages

die schleife musst du nicht pber downto durchgehen den mit IdPOP31.Retrieve(i,IdMessageMail) wird die email nur ausgelesen aber nicht gelöscht. Erst mit IDPop31.Delete(i) wird sie gelöscht.
entgültig werden die emails aber nur gelöscht wenn alle emails aus dem account gelöscht wurden. ist jedenfalls bei meinem email server so.

meine scheiffe sieht so aus :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
for i := 1 to IdPOP31.CheckMessages do
        begin
             // clear the component to store the mail
             IdMessageMail.Clear;
             // set nodecode to true because the mails send by the
             // server don't use mime
             IdMessageMail.NoDecode := True;
             // clear the mail body

             // retrieve the mail
             IdPOP31.Retrieve(i,IdMessageMail);

             Index := MailSubjects.Add(IdMessageMail.Subject);

             CheckListBoxMails.Items.Insert(Index,IdMessageMail.From.Address);
             CheckListBoxMails.Checked[Index] := True;

             MailBodys.Insert(Index,TStringlist.Create);
             TStringlist(MailBodys[Index]).Text := IdMessageMail.Body.Text;

             IDPop31.Delete(i);
        end;


ich speicher mir alle emails in einer TList

ich hoffe ich konte die etwas helfen

Moderiert von user profile iconDeCodeGuru: Code- durch Delphi-Tags versetzt

_________________
Ein Cocktail ohne Alkohol ist kein Cocktail
chritzl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 49

WIN 98 - bald Linux! :-)
Delphi 1, 4, 6
BeitragVerfasst: Mi 11.02.04 18:13 

    Problem gelöst!

    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
     For i := 1 to IdPOP31.CheckMessages do 
       begin 
         IdPOP31.Retrieve(i, IdMessage1); 
         memo1.lines.add('Betreff: '+IdMessage1.Subject); 
         <span style="color: green">IdMessage1.Clear;</span>
       end;


    War zwar nur ein kleines Stück Source, der mich drauf gebracht hat, aber immerhin!
    Thanks 2 Ungfmaster!

_________________
Geld ist rund und rollt weg, Bildung bleibt! Heine
Now known as NuCHiLL