diff --git a/MyMail.java b/MyMail.java index bad485e..b00edf5 100644 --- a/MyMail.java +++ b/MyMail.java @@ -75,7 +75,7 @@ public class MyMail { */ private boolean connectToServer() { // TODO: Connection-Objekt initialisieren - con = null; + con = new Connection(POP3_SERVER,POP3_PORT); // Begrüssungsnachricht des Servers empfangen und prüfen String mes = con.receive(); @@ -110,9 +110,24 @@ public class MyMail { // TODO: Implementieren // USER Kommando senden und Antwort prüfen + con.send("USER "+POP3_USER); + mes = con.receive(); + if( mes == null || mes.startsWith("-ERR") ) { + // Keine "positive response" :-( + // Setze einen Fehler und gib "false" zurück. + lastError = "login fehlgeschlagen"; + return false; + } // PASS Kommando senden und Antwort prüfen - + con.send("PASS "+POP3_PASS); + mes = con.receive(); + if( mes == null || mes.startsWith("-ERR") ) { + // Keine "positive response" :-( + // Setze einen Fehler und gib "false" zurück. + lastError = "login fehlgeschlagen"; + return false; + } // Anmeldung war erfolgreich return true; } @@ -132,12 +147,26 @@ public class MyMail { // TODO: Implementieren // Sende den STAT Befehl + con.send("STAT"); // Prüfe, ob die Antwort ein Fehler ist + mes = con.receive(); + if( mes == null || mes.startsWith("-ERR") ) { + // Keine "positive response" :-( + // Setze einen Fehler und gib "false" zurück. + lastError = "Mails konnten nich abgerufen werden"; + return 0; + } // Schneide den Teil zwischen den Leerzeichen aus // Finde die Leerzeichen mit indexOf(" ") + // Ermittele den Text mit substring(von, bis) + System.out.println("1| "+mes); + mes = mes.substring(mes.indexOf(" ")+1); // Wandele mit Integer.parseInt() in eine Zahl um - return 0; + System.out.println("2| "+mes); + mes = mes.substring(0,mes.indexOf(" ")); + System.out.println("3| "+ mes); + return Integer.parseInt(mes); } /** @@ -159,13 +188,21 @@ public class MyMail { // Anmeldung durchführen und prüfen // Hinweis: Nutze die login() Methode + boolean loggedin = login(); + if( !loggedin ) { + // Letzten Fehler anzeigen + gui.setError(lastError); + return; // Abbrechen + } // Anzahl Mails auf dem Server abfragen int mailCount = 0; - + mailCount = getMessageCount(); + //if(lastError != null) gui.setError(lastError); // Abruf der Mails nach fortlaufender Nummer for( int i = 1; i <= mailCount; i++ ) { // Mail abrufen (nutze getMail(int)) + gui.addMailToList(getMail(i)); // Mail der GUI hinzufügen (nutze gui.addMailToLost(Mail)) } @@ -199,23 +236,40 @@ public class MyMail { String mes = ""; // Speicher für Antworten des Servers // Prüfen, ob es eine Mail mit der Nummer pNumber gibt - + con.send("retr " + pNumber); + mes = con.receive(); // Mail abrufen (RETR) + String subject =""; + String from =""; + String sender=""; + String date =""; + String text = ""; + boolean header = true; - while( !mes.equals(".") ) { - // Text der Mail parsen - // Verarbeite die Metadaten, vor allem: - // - Nummer der Mail - // - Subject - // - From - // - Date - // Wenn der Textkörper anfängt, speichere alle Zeilen in einen String - // - // Hinweis: Denke daran die Maskierung des Enzeichens "." rückgängig zu machen. - // Tipp: Merk dir in einem boolean, ob du im Textkörper oder im Header bist. - } // end of while - - return null; + while( !mes.equals(".") ) { + // Text der Mail parsen + + // Verarbeite die Metadaten, vor allem: + // - Nummer der Mail + // - Subject + // - From + // - Date + // Wenn der Textkörper anfängt, speichere alle Zeilen in einen String + // + // Hinweis: Denke daran die Maskierung des Enzeichens "." rückgängig zu machen. + // Tipp: Merk dir in einem boolean, ob du im Textkörper oder im Header bist. + mes = con.receive(); + if(header){ + if(mes.equals("")) header = false; + else if(mes.startsWith("Subject")) subject = mes.substring(9); + else if(mes.startsWith("From")) from = mes.substring(mes.indexOf("<")+1, mes.indexOf(">")); + else if(mes.startsWith("Date")) date = mes.substring(7); + } else { + if(mes.equals(".")) break; + else text += mes+"\n"; + } + } // end of while + return new Mail(pNumber,date,from,subject,text); } /** @@ -235,16 +289,36 @@ public class MyMail { */ public void deleteMail( Mail pMail ) { // Verbindung erstellen und prüfen - + boolean connected = connectToServer(); + if( !connected ) { + // Letzten Fehler anzeigen (wird in connectToServer gesetzt). + gui.setError(lastError); + return; // Abbrechen + } // Anmeldung durchführen und prüfen - + boolean loggedin = login(); + if( !loggedin ) { + // Letzten Fehler anzeigen + gui.setError(lastError); + return; // Abbrechen + } // Prüfen, ob eine Mail mit der Nummer vorhanden ist // Hinweis: Die Nummer der Mail ist über pMail.getNumber() abrufbar + con.send("dele "+ pMail.getNumber()); + String mes = con.receive(); + if(mes.startsWith("-ERR")){ + lastError="EMail nich vorhanden"; + return; + } + + + // Mail als gelöscht markieren + gui.setStatus("Mail "+ pMail.getNumber()+ " wurde gelöscht"); // Löschung ausführen und Verbindung beenden. - + con.send("quit"); // Mail aus der GUI entfernen und neu aufbauen.s gui.removeMailFromList(pMail); } diff --git a/package.bluej b/package.bluej index 35b96ed..1bc03ed 100644 --- a/package.bluej +++ b/package.bluej @@ -1,42 +1,78 @@ #BlueJ package file -dependency1.from=MailClient -dependency1.to=Connection +dependency1.from=MyMailGUI +dependency1.to=MyMail dependency1.type=UsesDependency -editor.fx.0.height=777 -editor.fx.0.width=804 -editor.fx.0.x=36 -editor.fx.0.y=23 -objectbench.height=101 -objectbench.width=776 +dependency2.from=MyMailGUI +dependency2.to=Mail +dependency2.type=UsesDependency +dependency3.from=MyMailGUI +dependency3.to=List +dependency3.type=UsesDependency +dependency4.from=MyMail +dependency4.to=Connection +dependency4.type=UsesDependency +dependency5.from=MyMail +dependency5.to=MyMailGUI +dependency5.type=UsesDependency +dependency6.from=MyMail +dependency6.to=Mail +dependency6.type=UsesDependency +editor.fx.0.height=1416 +editor.fx.0.width=2576 +editor.fx.0.x=-8 +editor.fx.0.y=-8 +objectbench.height=193 +objectbench.width=2536 package.divider.horizontal=0.6 -package.divider.vertical=0.8007380073800738 -package.editor.height=427 -package.editor.width=662 -package.editor.x=40 -package.editor.y=172 -package.frame.height=600 -package.frame.width=800 -package.numDependencies=1 -package.numTargets=2 +package.divider.vertical=0.8480243161094225 +package.editor.height=1109 +package.editor.width=2425 +package.editor.x=0 +package.editor.y=0 +package.frame.height=1416 +package.frame.width=2576 +package.numDependencies=6 +package.numTargets=5 package.showExtends=true package.showUses=true project.charset=UTF-8 -readme.height=58 +readme.height=60 readme.name=@README -readme.width=47 +readme.width=49 readme.x=10 readme.y=10 -target1.height=50 -target1.name=Connection +target1.height=70 +target1.name=MyMail target1.showInterface=false target1.type=ClassTarget -target1.width=90 -target1.x=350 -target1.y=40 -target2.height=50 -target2.name=MailClient +target1.width=120 +target1.x=140 +target1.y=10 +target2.height=70 +target2.name=Mail target2.showInterface=false target2.type=ClassTarget -target2.width=80 -target2.x=110 -target2.y=150 +target2.width=120 +target2.x=10 +target2.y=80 +target3.height=50 +target3.name=Connection +target3.showInterface=false +target3.type=ClassTarget +target3.width=100 +target3.x=350 +target3.y=40 +target4.height=70 +target4.name=List +target4.showInterface=false +target4.type=ClassTarget +target4.width=150 +target4.x=140 +target4.y=90 +target5.height=70 +target5.name=MyMailGUI +target5.showInterface=false +target5.type=ClassTarget +target5.width=120 +target5.x=10 +target5.y=160