forked from IF-LK-2020/mymail
Controller (untested)
This commit is contained in:
97
MyMail.java
97
MyMail.java
@@ -8,10 +8,9 @@ public class MyMail {
|
|||||||
|
|
||||||
public static final String POP3_PASS = "user1";
|
public static final String POP3_PASS = "user1";
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
new MyMail();
|
// new MyMail();
|
||||||
//new MyMail("pop3.neugebauer.cc", 110, "informatik@neugebauer.cc", "ifq2_user1");
|
new MyMail("pop3.neugebauer.cc", 110, "informatik@neugebauer.cc", "ifq2_user1");
|
||||||
}
|
}
|
||||||
|
|
||||||
private String ip;
|
private String ip;
|
||||||
@@ -48,22 +47,22 @@ public class MyMail {
|
|||||||
// GUI erstellen und Status setzen.
|
// GUI erstellen und Status setzen.
|
||||||
gui = new MyMailGUI(this);
|
gui = new MyMailGUI(this);
|
||||||
gui.setStatus("App gestartet");
|
gui.setStatus("App gestartet");
|
||||||
|
|
||||||
|
connectToServer();
|
||||||
|
login();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stellt die Verbindung zum POP3-Server her.
|
* Stellt die Verbindung zum POP3-Server her.
|
||||||
* <p>
|
* <p>
|
||||||
* Erstellt ein {@link Connection}-Objekt für die Verbindung zum Server
|
* Erstellt ein {@link Connection}-Objekt für die Verbindung zum Server mit der
|
||||||
* mit der IP {@link #ip} und dem Port {@link #port}. Laut RFC1939 sendet
|
* IP {@link #ip} und dem Port {@link #port}. Laut RFC1939 sendet der
|
||||||
* der POP3-Server als Erstes eine Begrüßungsnachricht zur Bestätigung der
|
* POP3-Server als Erstes eine Begrüßungsnachricht zur Bestätigung der
|
||||||
* Verbindung:
|
* Verbindung:
|
||||||
*
|
*
|
||||||
* <blockquote>
|
* <blockquote> Once the TCP connection has been opened by a POP3 client, the
|
||||||
* Once the TCP connection has been opened by a POP3 client, the POP3
|
* POP3 server issues a one line greeting. This can be any positive response. An
|
||||||
* server issues a one line greeting. This can be any positive
|
* example might be: S: +OK POP3 server ready </blockquote>
|
||||||
* response. An example might be:
|
|
||||||
* S: +OK POP3 server ready
|
|
||||||
* </blockquote>
|
|
||||||
* <p>
|
* <p>
|
||||||
* Gibt es beim Verbindungsaufbau einen Fehler, gibt die Methode {@code false}
|
* Gibt es beim Verbindungsaufbau einen Fehler, gibt die Methode {@code false}
|
||||||
* zurück und setzt {@link #lastError} auf eine sinnvolle Fehlermeldung.
|
* zurück und setzt {@link #lastError} auf eine sinnvolle Fehlermeldung.
|
||||||
@@ -75,7 +74,7 @@ public class MyMail {
|
|||||||
*/
|
*/
|
||||||
private boolean connectToServer() {
|
private boolean connectToServer() {
|
||||||
// TODO: Connection-Objekt initialisieren
|
// TODO: Connection-Objekt initialisieren
|
||||||
con = null;
|
con = new Connection(ip, port);
|
||||||
|
|
||||||
// Begrüssungsnachricht des Servers empfangen und prüfen
|
// Begrüssungsnachricht des Servers empfangen und prüfen
|
||||||
String mes = con.receive();
|
String mes = con.receive();
|
||||||
@@ -93,14 +92,13 @@ public class MyMail {
|
|||||||
/**
|
/**
|
||||||
* Authentifiziert den Nutzer beim POP3-Server.
|
* Authentifiziert den Nutzer beim POP3-Server.
|
||||||
* <p>
|
* <p>
|
||||||
* Die Methode nutzt die {@code USER} / {@code PASS} Befehle zur
|
* Die Methode nutzt die {@code USER} / {@code PASS} Befehle zur Anmeldung mit
|
||||||
* Anmeldung mit dem {@link #user} und {@link #password}. Sie erwartet, dass
|
* dem {@link #user} und {@link #password}. Sie erwartet, dass zuvor erfolgreich
|
||||||
* zuvor erfolgreich eine Verbindung mit {@link #connectToServer()}
|
* eine Verbindung mit {@link #connectToServer()} hergestellt wurde.
|
||||||
* hergestellt wurde.
|
|
||||||
* <p>
|
* <p>
|
||||||
* Hat die Anmeldung Erfolg, wird {@code true} zurückgegeben. Andernfalls
|
* Hat die Anmeldung Erfolg, wird {@code true} zurückgegeben. Andernfalls
|
||||||
* {@code false} und {@link #lastError} wird auf eine sinnvolle Fehler-
|
* {@code false} und {@link #lastError} wird auf eine sinnvolle Fehler- meldung
|
||||||
* meldung gesetzt.
|
* gesetzt.
|
||||||
*
|
*
|
||||||
* @return {@code true} oder {@code false}
|
* @return {@code true} oder {@code false}
|
||||||
* @link https://datatracker.ietf.org/doc/html/rfc1939#page-13
|
* @link https://datatracker.ietf.org/doc/html/rfc1939#page-13
|
||||||
@@ -110,9 +108,19 @@ public class MyMail {
|
|||||||
|
|
||||||
// TODO: Implementieren
|
// TODO: Implementieren
|
||||||
// USER Kommando senden und Antwort prüfen
|
// USER Kommando senden und Antwort prüfen
|
||||||
|
con.send("USER " + user);
|
||||||
|
mes = con.receive();
|
||||||
|
if (mes == null || mes.startsWith("-ERR")) {
|
||||||
|
lastError = "Ungueltiger Benutzername!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// PASS Kommando senden und Antwort prüfen
|
// PASS Kommando senden und Antwort prüfen
|
||||||
|
con.send("PASS " + password);
|
||||||
|
mes = con.receive();
|
||||||
|
if (mes == null || mes.startsWith("-ERR")) {
|
||||||
|
lastError = "Ungueltiges Passwort!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// Anmeldung war erfolgreich
|
// Anmeldung war erfolgreich
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -121,8 +129,8 @@ public class MyMail {
|
|||||||
* Ermittelt die Anzahl an Nachrichten auf dem Server.
|
* Ermittelt die Anzahl an Nachrichten auf dem Server.
|
||||||
* <p>
|
* <p>
|
||||||
* Die Methode erwartet, dass zuvor erfolgreich eine Verbindung mit
|
* Die Methode erwartet, dass zuvor erfolgreich eine Verbindung mit
|
||||||
* {@link #connectToServer()} hergestellt wurde und nutzt dann den
|
* {@link #connectToServer()} hergestellt wurde und nutzt dann den {@code STAT}
|
||||||
* {@code STAT} Befehl, um die Anzahl der Mails zu ermitteln.
|
* Befehl, um die Anzahl der Mails zu ermitteln.
|
||||||
*
|
*
|
||||||
* @return Die Anzahl an Mails auf dem Server
|
* @return Die Anzahl an Mails auf dem Server
|
||||||
* @link https://datatracker.ietf.org/doc/html/rfc1939#page-6
|
* @link https://datatracker.ietf.org/doc/html/rfc1939#page-6
|
||||||
@@ -137,7 +145,14 @@ public class MyMail {
|
|||||||
// Finde die Leerzeichen mit indexOf(" ")
|
// Finde die Leerzeichen mit indexOf(" ")
|
||||||
// Ermittele den Text mit substring(von, bis)
|
// Ermittele den Text mit substring(von, bis)
|
||||||
// Wandele mit Integer.parseInt() in eine Zahl um
|
// Wandele mit Integer.parseInt() in eine Zahl um
|
||||||
return 0;
|
con.send("STAT");
|
||||||
|
mes = con.receive();
|
||||||
|
int space1 = mes.indexOf(" ");
|
||||||
|
int space2 = mes.lastIndexOf(" ", space1);
|
||||||
|
return Integer.parseInt(mes.substring(space1, space2));
|
||||||
|
|
||||||
|
// ---=== Alternativ ===---
|
||||||
|
// return Integer.parseInt(mes.split(" ")[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -159,6 +174,12 @@ public class MyMail {
|
|||||||
|
|
||||||
// Anmeldung durchführen und prüfen
|
// Anmeldung durchführen und prüfen
|
||||||
// Hinweis: Nutze die login() Methode
|
// Hinweis: Nutze die login() Methode
|
||||||
|
boolean loggedIn = login();
|
||||||
|
if (!loggedIn) {
|
||||||
|
// Letzten Fehler anzeigen (wird in connectToServer gesetzt).
|
||||||
|
gui.setError(lastError);
|
||||||
|
return; // Abbrechen
|
||||||
|
}
|
||||||
|
|
||||||
// Anzahl Mails auf dem Server abfragen
|
// Anzahl Mails auf dem Server abfragen
|
||||||
int mailCount = 0;
|
int mailCount = 0;
|
||||||
@@ -167,6 +188,7 @@ public class MyMail {
|
|||||||
for (int i = 1; i <= mailCount; i++) {
|
for (int i = 1; i <= mailCount; i++) {
|
||||||
// Mail abrufen (nutze getMail(int))
|
// Mail abrufen (nutze getMail(int))
|
||||||
// Mail der GUI hinzufügen (nutze gui.addMailToLost(Mail))
|
// Mail der GUI hinzufügen (nutze gui.addMailToLost(Mail))
|
||||||
|
gui.addMailToList(getMail(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verbindung beenden
|
// Verbindung beenden
|
||||||
@@ -183,8 +205,8 @@ public class MyMail {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ruft die Mail mit der Nummer <var>pNumber</var> vom Server ab und
|
* Ruft die Mail mit der Nummer <var>pNumber</var> vom Server ab und gibt sie
|
||||||
* gibt sie als {@link Mail}-Objekt zurück.
|
* als {@link Mail}-Objekt zurück.
|
||||||
* <p>
|
* <p>
|
||||||
* Die Methode erwartet, dass zuvor erfolgreich eine Verbindung mit
|
* Die Methode erwartet, dass zuvor erfolgreich eine Verbindung mit
|
||||||
* {@link #connectToServer()} hergestellt wurde.
|
* {@link #connectToServer()} hergestellt wurde.
|
||||||
@@ -199,8 +221,14 @@ public class MyMail {
|
|||||||
String mes = ""; // Speicher für Antworten des Servers
|
String mes = ""; // Speicher für Antworten des Servers
|
||||||
|
|
||||||
// Prüfen, ob es eine Mail mit der Nummer pNumber gibt
|
// Prüfen, ob es eine Mail mit der Nummer pNumber gibt
|
||||||
|
int count = getMessageCount();
|
||||||
|
if (pNumber > count) {
|
||||||
|
lastError = "Es gibt keine Mail " + pNumber + "!";
|
||||||
|
}
|
||||||
|
|
||||||
// Mail abrufen (RETR)
|
// Mail abrufen (RETR)
|
||||||
|
con.send("RETR " + pNumber);
|
||||||
|
mes = con.receive();
|
||||||
|
|
||||||
while (!mes.equals(".")) {
|
while (!mes.equals(".")) {
|
||||||
// Text der Mail parsen
|
// Text der Mail parsen
|
||||||
@@ -211,8 +239,12 @@ public class MyMail {
|
|||||||
// - Date
|
// - Date
|
||||||
// Wenn der Textkörper anfängt, speichere alle Zeilen in einen String
|
// Wenn der Textkörper anfängt, speichere alle Zeilen in einen String
|
||||||
//
|
//
|
||||||
// Hinweis: Denke daran die Maskierung des Enzeichens "." rückgängig zu machen.
|
// 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.
|
// Tipp: Merk dir in einem boolean, ob du im Textkörper oder im Header bist.
|
||||||
|
|
||||||
|
mes = con.receive();
|
||||||
|
System.out.println(mes);
|
||||||
} // end of while
|
} // end of while
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -221,17 +253,18 @@ public class MyMail {
|
|||||||
/**
|
/**
|
||||||
* Löscht eine Mail vom Server.
|
* Löscht eine Mail vom Server.
|
||||||
* <p>
|
* <p>
|
||||||
* Die Methode stellt eine Verbindung zum Server her, markiert die
|
* Die Methode stellt eine Verbindung zum Server her, markiert die übergebene
|
||||||
* übergebene Mail als gelöscht und beendet die Verbindung.
|
* Mail als gelöscht und beendet die Verbindung.
|
||||||
* <p>
|
* <p>
|
||||||
* Tritt ein Fehler auf, bricht die Methode ab und setzt
|
* Tritt ein Fehler auf, bricht die Methode ab und setzt den Status der GUI auf
|
||||||
* den Status der GUI auf eine sinnvolle Fehlermeldung.
|
* eine sinnvolle Fehlermeldung.
|
||||||
*
|
*
|
||||||
* <b>Achtung</b>: Es wird die Mail mit derselben Nummer wie <var>pMail</var>
|
* <b>Achtung</b>: Es wird die Mail mit derselben Nummer wie <var>pMail</var>
|
||||||
* gelöscht. Es wird nicht garantiert, dass dies auch dieselbe Mail ist.
|
* gelöscht. Es wird nicht garantiert, dass dies auch dieselbe Mail ist.
|
||||||
*
|
*
|
||||||
* @param pMail Das Mailobjekt, das gelöscht werden soll.
|
* @param pMail Das Mailobjekt, das gelöscht werden soll.
|
||||||
* @todo Vor Löschen prüfen, ob die Mail auf dem Server dieselbe wie pMail ist.
|
* @todo Vor Löschen prüfen, ob die Mail auf dem Server dieselbe wie pMail
|
||||||
|
* ist.
|
||||||
*/
|
*/
|
||||||
public void deleteMail(Mail pMail) {
|
public void deleteMail(Mail pMail) {
|
||||||
// Verbindung erstellen und prüfen
|
// Verbindung erstellen und prüfen
|
||||||
|
|||||||
@@ -1,23 +1,38 @@
|
|||||||
#BlueJ package file
|
#BlueJ package file
|
||||||
dependency1.from=MailClient
|
dependency1.from=MyMail
|
||||||
dependency1.to=Connection
|
dependency1.to=Connection
|
||||||
dependency1.type=UsesDependency
|
dependency1.type=UsesDependency
|
||||||
editor.fx.0.height=777
|
dependency2.from=MyMail
|
||||||
editor.fx.0.width=804
|
dependency2.to=MyMailGUI
|
||||||
editor.fx.0.x=36
|
dependency2.type=UsesDependency
|
||||||
editor.fx.0.y=23
|
dependency3.from=MyMail
|
||||||
objectbench.height=101
|
dependency3.to=Mail
|
||||||
objectbench.width=776
|
dependency3.type=UsesDependency
|
||||||
|
dependency4.from=MyMailGUI
|
||||||
|
dependency4.to=MyMail
|
||||||
|
dependency4.type=UsesDependency
|
||||||
|
dependency5.from=MyMailGUI
|
||||||
|
dependency5.to=Mail
|
||||||
|
dependency5.type=UsesDependency
|
||||||
|
dependency6.from=MyMailGUI
|
||||||
|
dependency6.to=List
|
||||||
|
dependency6.type=UsesDependency
|
||||||
|
editor.fx.0.height=0
|
||||||
|
editor.fx.0.width=0
|
||||||
|
editor.fx.0.x=0
|
||||||
|
editor.fx.0.y=0
|
||||||
|
objectbench.height=93
|
||||||
|
objectbench.width=760
|
||||||
package.divider.horizontal=0.6
|
package.divider.horizontal=0.6
|
||||||
package.divider.vertical=0.8007380073800738
|
package.divider.vertical=0.8
|
||||||
package.editor.height=427
|
package.editor.height=393
|
||||||
package.editor.width=662
|
package.editor.width=649
|
||||||
package.editor.x=40
|
package.editor.x=40
|
||||||
package.editor.y=172
|
package.editor.y=172
|
||||||
package.frame.height=600
|
package.frame.height=600
|
||||||
package.frame.width=800
|
package.frame.width=800
|
||||||
package.numDependencies=1
|
package.numDependencies=6
|
||||||
package.numTargets=2
|
package.numTargets=5
|
||||||
package.showExtends=true
|
package.showExtends=true
|
||||||
package.showUses=true
|
package.showUses=true
|
||||||
project.charset=UTF-8
|
project.charset=UTF-8
|
||||||
@@ -27,16 +42,37 @@ readme.width=47
|
|||||||
readme.x=10
|
readme.x=10
|
||||||
readme.y=10
|
readme.y=10
|
||||||
target1.height=50
|
target1.height=50
|
||||||
target1.name=Connection
|
target1.name=MyMail
|
||||||
target1.showInterface=false
|
target1.showInterface=false
|
||||||
target1.type=ClassTarget
|
target1.type=ClassTarget
|
||||||
target1.width=90
|
target1.width=80
|
||||||
target1.x=350
|
target1.x=140
|
||||||
target1.y=40
|
target1.y=10
|
||||||
target2.height=50
|
target2.height=50
|
||||||
target2.name=MailClient
|
target2.name=Mail
|
||||||
target2.showInterface=false
|
target2.showInterface=false
|
||||||
target2.type=ClassTarget
|
target2.type=ClassTarget
|
||||||
target2.width=80
|
target2.width=80
|
||||||
target2.x=110
|
target2.x=70
|
||||||
target2.y=150
|
target2.y=70
|
||||||
|
target3.height=50
|
||||||
|
target3.name=Connection
|
||||||
|
target3.showInterface=false
|
||||||
|
target3.type=ClassTarget
|
||||||
|
target3.width=100
|
||||||
|
target3.x=350
|
||||||
|
target3.y=40
|
||||||
|
target4.height=50
|
||||||
|
target4.name=List
|
||||||
|
target4.showInterface=false
|
||||||
|
target4.type=ClassTarget
|
||||||
|
target4.width=150
|
||||||
|
target4.x=10
|
||||||
|
target4.y=130
|
||||||
|
target5.height=50
|
||||||
|
target5.name=MyMailGUI
|
||||||
|
target5.showInterface=false
|
||||||
|
target5.type=ClassTarget
|
||||||
|
target5.width=90
|
||||||
|
target5.x=160
|
||||||
|
target5.y=70
|
||||||
|
|||||||
Reference in New Issue
Block a user