Entwickler-Ecke

Internet / Netzwerk - Emails abholen mit IMAP4 (TIdIMAP4)


Dusty - So 08.06.03 23:08
Titel: Emails abholen mit IMAP4 (TIdIMAP4)
Das AOL Postfach lässt sich nicht mit POP3 lesen, aber es gibt einen Zugang über den IMAP Server. Ich kann mich auch einloggen, aber beim Versuch, die Email zu lesen, handel ich mir nur eine Exception ein :-(


Das Programm:
==========
Formular mit IdMessage1, IdIMAP41, Edit1, Edit2, Button1.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.Button1Click(Sender: TObject);
var sl : TStringList;
begin
   IdIMAP41.connect; // User, Passwort und Host in Komponente hinterlegt
   sl := TStringList.Create;
   try
      case IdIMAP41.ConnectionState of
         csAny               : Edit1.Text := 'csAny';
         csNonAuthenticated  : Edit1.Text := 'csNon';
         csAuthenticated     : Edit1.Text := 'csAut';   // dies ist mein Conn. State
         csSelected          : Edit1.Text := 'csSel';
      else
                               Edit1.Text := 'indef';
      end;
      if not IDIMAP41.ListMailBoxes(sl) then
         ShowMessage('ListMailBoxes failed'); // wird nicht angezeigt, aber sl ist leer
      Edit2.Text := IntToStr(IdIMAP41.RetrieveMailBoxSize); // hier Exception
      IdIMAP41.RetrieveHeader(1,idMessage1); // hier auch, wenn Zeile darüber auskommentiert
      Edit1.Text := idMessage1.ReceiptRecipient.Name; // hier komme ich schon gar nicht mehr hin
       finally
      IdIMAP41.Disconnect;
      sl.Free;
   end;
end;


Die Fehlermeldung:
=============
"Unable to execute command, wrong connection state;Current connection state: Authenticated.'

Wer kann helfen?

Moderiert von user profile iconUGrohne: Delphi-Tags hinzugefügt


Biggs - Mo 16.06.03 01:19

Zwar spät, aber vielleicht kannst du ja noch Hilfe brauchen.

Bevor du auf .RetrieveMailBoxSize zugreifen kannst, muss die Mailbox zwingend selected sein, mithin sich ConnectionState im Modus "selected" befinden.

Erst dann kann man die Größe der "selektierten" Mailbox ermitteln, auf Messages in der entspr. Mailbox zugreifen usw.

HTH

Henri


Dusty - Mo 16.06.03 15:06

Das mit der Selektierung habe ich schon herausgefunden durch Probieren.
Ich kann jetzt auch in einer Schleife mit IdIMAP41.RetrieveHeaders die Header lesen. Wenn ich statt RetrieveHeaders jedoch Retrieve nehme, um die ganze Email holen zu lassen, bleibt das Programm bei der zweiten, spätestens aber bei der dritten Email "kommentarlos" stehen. Mit dem Debugger komme ich also bis zum Retrieve-Befehl und dann steht das Programm. ZoneAlarm zeigt an, dass keine Datenübertragung stattfindet. Über Start - Programm zurücksetzen lässt sich das Delphi-Programm ohne murren beenden. Es hat sich also nicht aufgehängt oder so. Der Status der Mailbox ist immer csSelected.

Weil ich nicht weiß, wie ich die Anzahl der vorhandenen Emails abrufe, lasse ich die Header in einer TRY EXCEPT FINALLY Schleife laufen und lasse es also auf eine Exception ("FETCH failed" oder so ähnlich) ankommen. Kurz: Wie frage ich die Anzahl der vorhandenen Emails ab?