Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem mit Retrieveheader (https://www.delphipraxis.net/27540-problem-mit-retrieveheader.html)

DerSkw 11. Aug 2004 23:06


Problem mit Retrieveheader
 
Also, ich hab hier mal einen Code, der meine mails abholt und die anlagen mit ner id speichert, aber wenn mehr als eine mail auf dem konto ist bekomme ich eine "Zugriffs Verletzung" Meldung.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var PartIndex,i : Integer;
         id_buf : String;
begin
randomize;
 IdPop31.Host:='pop.onlinehome.de';
 IdPop31.Username:='Username';
 IdPop31.Password:='Passwort';
 IdPop31.Connect();

for i:=1 to idpop31.CheckMessages do
begin
 IdPop31.Retrieveheader(i,IdMessage1);
  for PartIndex:=0 to IDMessage1.MessageParts.Count-1 do
   begin
    if(IdMessage1.MessageParts.Items[Partindex] is TIdAttachment) then
     Begin
      id_buf:=((copy(TimeToStr(now),1,2)+copy(TimeToStr(now),4,2)+copy(TimeToStr(now),7,2))+IntToStr(random(10))+IntToStr(random(10)));
      if fileexists(Extractfilepath(paramstr(0))+'\'+id_buf+'.rwgf') then
       deletefile(Extractfilepath(paramstr(0))+'\'+id_buf+'.rwgf');
      TIdAttachment(IdMessage1.MessageParts.Items[Partindex]).SaveToFile(Extractfilepath(paramstr(0))+'\'+id_buf+'.rwgf');
     end;
   end;
 idmessage1.Free;
 idpop31.Delete(i);
end;
 IdPop31.Disconnect;
 showmessage('done');
end;
Schonmal Danke für die Hilfe!

mfg DerSkw

DerSkw 19. Aug 2004 13:09

Re: Problem mit Retrieveheader
 
Kann oder will mir hier keiner helfen?
:(

Sanchez 19. Aug 2004 13:16

Re: Problem mit Retrieveheader
 
Hi,

Ohne es auszutesten würde ich die Zugriffsverletzung mal der Zeile

Delphi-Quellcode:
 idmessage1.Free;
in die Schuhe schieben. Ich weiss nicht wo du das idmessage1 erzeugst, aber aufgrund der Bezeichnung gehe ich mal davon aus, dass es eine Komponente ist. Außerdem übernimmt es RetreiveHeaders nicht als var.

Versuchs auf alle Fälle mal ohne das free.

grüße, daniel

DerSkw 19. Aug 2004 13:26

Re: Problem mit Retrieveheader
 
OK ohne idmessage.free geht es, aber die anhänge werden nicht gespeichert!

DerSkw 19. Aug 2004 14:29

Re: Problem mit Retrieveheader
 
Mir fällt gerade auf, dass das Prog die mails garnicht bearbeitet, sondern nur löscht, hier ist der neue code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 test_lab.Caption:='ready';
 timer1.OnTimer(form1);
 timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var PartIndex,i : Integer;
         id_buf : String;
begin
randomize;
 IdPop31.Host:='pop.onlinehome.de';
 IdPop31.Username:='user';
 IdPop31.Password:='pass';
 IdPop31.Connect();
 test_lab.Caption:='ready';
for i:=1 to idpop31.CheckMessages do
begin
 IdPop31.Retrieveheader(i,IdMessage1);
  for PartIndex:=0 to IDMessage1.MessageParts.Count-1 do
   begin
    if(IdMessage1.MessageParts.Items[Partindex] is TIdAttachment) then
     Begin
      id_buf:=((copy(TimeToStr(now),1,2)+copy(TimeToStr(now),4,2)+copy(TimeToStr(now),7,2))+IntToStr(random(10))+IntToStr(random(10)));
      if fileexists(Extractfilepath(paramstr(0))+'\'+id_buf+'.rwgf') then
       deletefile(Extractfilepath(paramstr(0))+'\'+id_buf+'.rwgf');
      TIdAttachment(IdMessage1.MessageParts.Items[Partindex]).SaveToFile(Extractfilepath(paramstr(0))+'\'+id_buf+'.rwgf');
      shellexecute(handle,'open',PChar(Extractfilepath(paramstr(0))+'\worker.exe '+Extractfilepath(paramstr(0))+'\'+id_buf+'.rwgf'),nil,nil,sw_show);
     end;
   end;
 idpop31.Delete(i);
 test_lab.Caption:=inttostr(i);
end;
 IdPop31.Disconnect;
 idmessage1.Free;
 test_lab.Caption:='done';

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 timer1.Enabled:=false;
end;

danku 21. Aug 2006 09:39

Re: Problem mit Retrieveheader
 
kann es sein das nach deiner methode die heruntergeladendaten zwar auf dem server gelöscht werden aber kein inhalt lokal gespeichert wird?

Union 21. Aug 2006 15:09

Re: Problem mit Retrieveheader
 
Das Message-Objekt musst Du vorher auch erzeugen. Ausserdem solltest Dir das Ergebnis von Checkmessages in einer Variablen speichern - sonst hat der Schleifenindex jedesmal einen anderen Wert, da Du ja die Mails mit Delete löschst:
Delphi-Quellcode:
MessageCount := idpop31.CheckMessages;
for i := 1 to MessageCount do
begin
   IdMessage1 := TIdMessage.Create(NIL);
   IdPop31.Retrieveheader(i,IdMessage1);
   ...
   idpop31.Delete(i);
   IdMessage1.Free;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 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