ich möchte mit Java einen kleinen Mailclient programmieren und hänge nun an folgendem Problem fest:
Immer wenn ich ein Kommando, z.B. STAT oder USER zum POP-Server geschickt habe, kam auch nur eine einzeilige Antwort zurück à la +OK 2 2345. Die habe ich wunderbar mit unten stehendem Code einlesen können. popSocket ist meine Socket-Instanz, die auf den POP-Server zugreift.
Nun sende ich aber das RETR bzw. LIST Kommando und werde, zumindest bei RETR, nicht eine einzelne Zeile, sondern mehrere zurückbekommen. Leider habe ich keinerlei Idee, wie ich die alle einlesen soll. Könnt Ihr mir da weiterhelfen?
in = new BufferedReader(new InputStreamReader(popSocket.getInputStream()));
received = in.readLine();
System.out.println(received);
Die Schleife funktioniert generell schon, aber noch nicht hundertprozentig
Ich lasse mir im Schleifenrumpf einfach immer bei jedem Durchlauf den Inhalt von „zeile“ ausgeben. Der sieht auch gut aus. Allerdings sieht’s nach einer Endlosschleife aus. Die letzte Zeile wird korrekt empfangen, aber danach wird nicht abgebrochen, d.h. der auf die Schleife folgende Code wird nicht abgearbeitet.
Die
letzte Zeile wird korrekt empfangen, aber danach wird nicht
abgebrochen, d.h. der auf die Schleife folgende Code wird
nicht abgearbeitet.
Das liegt daran, dass die Socket-Verbindung zum Mail-Server ja nicht abgebrochen wird, sondern weitere Anfragen folgen können. POP3 und IMAP sind ja verbindungsorientierte, authentifizierte Protokolle. Der Socket wird also nicht nach jedem Befehl geschlossen:
-> SOCKET OPEN
-> CONNECT
LOGIN!
Damit, auf das Schließen des Sockets zu warten, wirst du hier
nicht weiterkommen.
Nee, das ist wohl wahr Habe es inzwischen so gelöst, wie Du gerade vorgeschlagen hast. Das POP3-Protokoll sendet nach mehrzeiligen Antworten eine Zeile, die nur einen Punkt enthält. Ich frage nun ab, ob die Zeile einen . enthält und die Länge 1 hat. Dann ist sicher, dass alles übertragen wurde.