Irgendwo ist das ganze fürn Ar***.
Hier mal der erste teil deines Quelltextes.
Delphi-Quellcode:
procedure TForm1.MailsAbrufen;
var
//Integers
intIndex,i:integer;
begin
try
idPOP31.Connect;
except
MessageDlg('Es konnte keine Verbindung zum Postfach hergestellt werden. Bitte überprüfen Sie alle Einstellungen.',mtInformation,[mbOk],0);
end;
MailCount := idPOP31.CheckMessages;
idPOP31.Retrieve(1,idMessage1);
[...]
Wenn also das Connect fehl schlägt kommt eine Meldung und anschließend wird trotzdem versucht die nachrichten abzurufen
Wie soll das gehen? Wenn keine Verbindung hergestellt werden kann so können auch keine Nachrichten abgerufen werden.
[
OT]
Laut Delphistandard heißt es auch nicht
Delphi-Quellcode:
for [...] do begin
//Anweisungen
end;
if [...] then begin
//Anweisungen
end;
sondern
Delphi-Quellcode:
for [...] do
begin
//Anweisungen
end;
if [...] then
begin
//Anweisungen
end;
So sieht man wenigstens auf anhieb wo das end dazu gehört (denn zu einem "for" oder "if" gehört nicht zwingend ein "end" und es ist nicht grad schön zu lesen wenn ich immer erst das ende der zeile suchen muss (eventuell sogar scrollen) um zu wissen ob ein "begin" zur anweisung gehört oder ob es eine einzilge Anweisung ist
[/
OT]
wo liegt eigentlich der Sinn von
Delphi-Quellcode:
if IdMessage1.MessageParts.Count <> 0 then //<==
begin
for intIndex := 0 to (IdMessage1.MessageParts.Count-1) do
begin
if idMEssage1.MessageParts.Items[intIndex] is TIdText then
begin //bei Einzelanweisungen ist "begin end" überflüssig
mailBody := TidText(IdMessage1.MessageParts.Items[intIndex]).Body.Text;
end
else if idMEssage1.MessageParts.Items[intIndex] is TIdAttachmentFile then
begin
attFileName := (idMEssage1.MessageParts.Items[intIndex] as tIdAttachmentFile).Filename;
TidAttachmentFile(idMessage1.MessageParts.Items[intIndex]).SaveToFile(path+'\tmp\'+attFileName);
ID2 := ID2+1;
anhang_id_list.Add(IntToStr(ID2));
anhang_list.Add(attFileName);
end;
end;
end
else if IdMessage1.MessageParts.Count = 0 then //<==
begin //bei Einzelanweisungen ist "begin end" überflüssig
MailBody := idMessage1.Body.Text;
end;
Wenn do oben auf ungleich 0 prüfst musst du unten kein "else if gleich 0" machen, da reicht auch ein einfaches else (sorry das ich den source bei dem beispiel mal bissl anders formatiert hab, aber sonst sieht man überhaupt ni durch was wozu gehört)