Emails abrufbar

This commit is contained in:
Artem Didytschuk 2022-02-01 16:41:40 +01:00
parent 32bbcb01e1
commit be71f59dba
2 changed files with 161 additions and 51 deletions

View File

@ -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);
}

View File

@ -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