Mail Server selber schreiben

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo zusammen!

Ich möchte gerne einen eigenen e-Mail Server in JAVA realisieren (SMTP & POP. Vorerst kein IMAP).

Bevor jetzt die Rufe "Da gibt es doch genug Programme für!!" kommen, etwas zu meiner Motivation.

Der Grund dafür, dass ich den Server selber schreiben möchte ist, dass ich eine bzw. mehrere PGP Funktionen einbauen möchte.
Die Idee kam mir als ich vor einigen Tagen als ich Enigmail für Thunderbird installieren wollte.
Ich studiere zur Zeit (Medien-)informatik im 7. Semester an der Uni Ulm und mir ist bei der Installation und Konfiguration aufgefallen, dass beides nicht so ganz trivial war. Auch frage ich mich, wie denn Outlook-Nutzer und besonders Anwender exotischer Mailprogramme ihre Mails verschlüsseln.
Im Klartext heisst das, dass ich mit der Bedienbarkeit von Enigmail und der mangelnden Unterstützung für PGP bei alternativen Mailprogrammen unzufrieden war, denn wenn ich als Informatikstudent eine Weile brauche um Enigmail so zu konfigurieren, so dass es das macht, was ich will, wie soll das dann meine Oma hinbekommen?
Das Problem bei PGP ist ja, das es ein asymetrischen Schlüsselaustauschverfahren verwendet. Das heisst, nutzt der Empfänger meiner e-Mail kein PGP so hab ich logischerweise auch keinen öffentlichen Schlüssel von ihm und kam ihm keine verschlüsselte e-Mail schicken. Für mich persönlich wäre es wünschenswert, wenn die ganze Welt PGP nutzen würde, so wäre theoretisch jeglicher e-Mailverkehr in zukunft sicher verschlüsselt und signiert. - Utopisch, ich weiss, aber wenn nur 80% aller Mailschreiber PGP nutzen würden, wäre es bereits ein Erfolg.
Diesem Ziel steht aber die Komplexität von PGP samt der Idee des TrustedWeb gegenüber. Selbst wenn ein eMail-Programm oder Plugin eine einfache Bedienung garantieren würden, bringt dies relativ wenig, wenn der User keine Ahnung von PGP an sich hat (Und das wird wohl leider sehr häufig der Fall sein).
Ich würde also hingehen und den User so wenig davon mitkriegen lassen. Ich würde ihn einmal nach einem (sicheren) Passwort fragen und anschließend alles andere dem Programm überlasssen:

1) Schlüsselpaar generieren
2) Kontakte im Mailprogramm durchsuchen und mit einem Keyserver abgleichen und möglichst viele öffentliche Schlüssel herunterladen
3) Ausgehende e-Mails immer signieren und den eigenen öffentlichen Schlüssel noch "dran kleben"
4) Ausgehende e-Mails möglichst verschlüsseln sofern ein öffentlicher Schlüssel des Empfängers bekannt ist
5) Ankommende e-Mails gegebenfalls automatisch entschlüsseln und die Signatur prüfen

Der Anwender selber soll davon so wenig wie möglich mitbekommen. Alles was er weiss ist: "Meine eMails werden verschlüsselt" und mehr nicht.

Jetzt war meine erste Idee eine total einfach Version von Enigmail zu schreiben und dies als Plugin realiseren.
Dann habe ich aber das Problem, dass ich für jedes existierende Programm ein Plugin schreiben müsste und das möchte ich nicht. Einige wenige dieser tools können ja noch nicht mal Erweiterungen wie Plugins nutzen (Autluck Äckzpräss *hust*).

Die Idee vom Plugin scheidet also aus.

Anschließend habe ich mir überlegt einfach einen Daemon zu schreiben der den SMTP- und POP bzw. IMAP - Strom bzw. Port überwacht, diesen abfängt und die Operationen automatisch ausführt. - Irgendwie nicht so elegant und auch nicht sehr einfach glaube ich.

Dann kam mit die Idee mit dem Mailserver und sie funktioniet wie folgt:

Nehmen wir an, Alice möchte Bob eine eMail schreiben.
Alice installiert meinen tollen Mailserver (Nennen wir ihn mal ezPGP - Ja, ich habe schon einen Namen dafür ;-)) und lässt ihn im Hintergrund als Daemon laufen. Bei der Installation des Servers wird ein Wizard gestartet, der ein (sicheres) Passwort abfragt und die oben genannten Schritte 1) - 2) ausführt.

Nehmen wir nun an, Alice hätte einen eMail account bei GMX mit dem Loginnamen alice@gmx.de und dem Passwort "123".

Alice trägt nun diese Daten, den SMTP- und POP server von GMX ein.

Nun öffnet sie ihr standartmäßiges eMailprogramm und trägt dort als Mailserver nicht GMX sondern den lokalen Server auf ihrem Rechner ein.

Von nun an werden eMails nicht mehr direkt an GMX sondern an ihren lokalen Mailserver geschickt. Dieser Server verwaltet die gesamte PGP-Arbeit wie in den Schritten 3) - 5) beschrieben ohne dass Alice groß etwas davon mitbekommt.
Herinkommende eMails fängt ezPGP ab und speichert sie lokal. Alice kann diese eMails ganz normal mit zum Beispiel Thunderbird mit POP oder IMAP abrufen.

Das ist so die Idee.

Nun habe ich schon einige Erfahrungen mit JAVA aber ich konnte trotz fleissigem Googlen keinen Ansatz finden um einen Mailserver zu schreiben (Noch nie gemacht).
Wie gesagt, ich studiere im 7. Semester Informatik und habe auch einige grundlegende Kentnisse von SMTP und POP. Trotzdem will mir kein so richtier Ansatz einfallen. Ich denke das Problem ist nicht so ganz trivial?
JavaMail bringt mir hierbei ja herzlich wenig. Das ist ja nur für Clientsoftware.
Ich vermute ich muss als Mailserver ständig an einem bestimmten Port "lauschen" falls Mails reinkommen und auch einen Socket reservieren/wählen?

Für eine Idee zu einem Ansatz wäre ich sehr dankbar.
Auch ein paar Klassen, die ich dabei verwenden könnte würden helfen.

Gruß
Timo

Ps.: Sorry, für den langen Text :)
 

Hilefoks

Bekanntes Mitglied
Dieses Projekt ist sicher nett, um etwas Netzwerkprogrammierung mit Java zu lernen. Zeitgleich ist dieses Projekt aber wohl auch schon etwas zu gross, um einfach nur zu lernen.

Einen wirklichen Einsatz für diesen Mail-Server (so wie du ihn Skizziert) wird es aber wohl eher nicht geben. Das grösste Problem dabei ist deine Benutzerfreundlichkeit mit der du jede Sicherheit des PGP aushebelst.

Nehmen wir an das du einen solchen Mailserver betreibst und mir eine Mail schreiben möchtest. Dein Mailserver wird nun völlig automatisch meinen PGP-Key ziehen, damit die Mail verschlüsseln und diese mir schicken. Problem Nr. 1 ist aber schon einmal das ich mehrere PGP-Keys für die gleiche Adresse nutze - woher weiß dein Mail-Server welche er nehmen soll.

Noch schlimmer ist das zweite Szenario: Ein böser Mensch hängt sich zwischen dir und meinem Mailserver. Anschließend erzeugt er einen neuen PGP-Key auf meinen Namen. Dein Mail-Server nutzt nun dieses PGP-Key (z.B. weil er neuer ist) um mir Mails zu schreiben. Der böse Mensch zwischen uns fängt nun diese Mail, entschlüsselt sie mit dem ihm bekannten Key, verschlüsselt sie mit meinem echten Key wieder und schickt sie weiter an mich. So kann der böse Mensch unsere Kommunikation mitlesen und wir merken nicht einmal was davon.

Daher muss man immer selber "Hand anlegen", - man muss sich den öffentlichen Schlüssel auf einem sicheren Weg authentifizieren lassen. Das ist das Wesen eines jeden Public-Key-Verfahren (pgp, ssl, u.U. ssh, etc.). Wenn dies automatisiert wird, zumindest so weitreichend das man selbst nichts mehr davon mit bekommt, ist das ganze PGP Verfahren nicht mehr sicher!

Erschwerend kommt bei deinem Mailserver hinzu, das du nicht mit dem Benutzer kommunizieren kannst.

Sicherlich gibt es aber dennoch einen grossen Raum für Verbesserungen, insbesondere an der Benutzerfreundlichkeit. Ich hoffe dir nicht komplett den Mut genommen zu haben, aber ich hoffe das du dein Projekt nochmals genauer überdenkst. Nichts ist ärgerlicher als ein Projekt, bei dem nach viel arbeit festgestellt werden muss, das die gesamte Entwicklung in die falsche Richtung erfolgte...

MfG,
Hilefoks
 

babuschka

Top Contributor
Danke für die Kritik.
Ich hatte gehofft, die ein oder andere Diskussion hier zunächst zum Konzept starten zu können..

Hilefoks hat gesagt.:
Nehmen wir an das du einen solchen Mailserver betreibst und mir eine Mail schreiben möchtest. Dein Mailserver wird nun völlig automatisch meinen PGP-Key ziehen, damit die Mail verschlüsseln und diese mir schicken. Problem Nr. 1 ist aber schon einmal das ich mehrere PGP-Keys für die gleiche Adresse nutze - woher weiß dein Mail-Server welche er nehmen soll.
Ich würde sagen, das ist egal solange du persönlich da keine Präferenz machst?

Noch schlimmer ist das zweite Szenario: Ein böser Mensch hängt sich zwischen dir und meinem Mailserver. Anschließend erzeugt er einen neuen PGP-Key auf meinen Namen. Dein Mail-Server nutzt nun dieses PGP-Key (z.B. weil er neuer ist) um mir Mails zu schreiben. Der böse Mensch zwischen uns fängt nun diese Mail, entschlüsselt sie mit dem ihm bekannten Key, verschlüsselt sie mit meinem echten Key wieder und schickt sie weiter an mich. So kann der böse Mensch unsere Kommunikation mitlesen und wir merken nicht einmal was davon.
Das kann nicht passieren:
1) Ich würde wahrscheinlich das Konzept des TrustedWeb nutzen, falls dir das was sagt. Der "Mailserver" wird also nur PGPKeys nutzen, die er aus vertrauenswürdigen Quellen hat, die zertifiziert sind oder die z.B. über einen Fingerprint verifiziert werden können.
2) Wie soll der "böse Mann" die eMails mit deinem geheimen Schlüssel verschlüsseln? Wo soll er den her haben?

Erschwerend kommt bei deinem Mailserver hinzu, das du nicht mit dem Benutzer kommunizieren kannst.
Warum nicht? Der Mailserver-Daemon läuft ja auf dem selben Rechner..
 

hupfdule

Top Contributor
Um das ganze mal einzugrenzen: Was du versuchst, ist ein Mailserver, der ausschließlich für Privatanwender gedacht ist, immer auf dem selben Rechner läuft und quasi als Proxy zwischen dem Client und dem eigentlichen Mailserver fungiert.

In dieser Konstellation ist das schon machbar. Den Aufwand kannst du damit doch stark begrenzen. Denn einen vollständigen Mailserver zu schreiben, dauert schon seine Zeit.

Dennoch teile ich die Meinung von Hilefoks, dass du teilweise die Sicherheit von PGP aushebelst. Diese Schwachstelle könntest du beheben, indem du tatsächlich den Mailserver mit dem Benutzer kommunizieren lässt, du also bei Bedarf ein Fenster öffnest, in das der Benutzer etwas eingeben oder eine Auswahl treffen muss. Das Passwort muss der Benutzer ohnehin angeben. Von daher muss diese Möglichkeit sowieso gegeben sein.

1) Ich würde wahrscheinlich das Konzept des TrustedWeb nutzen, falls dir das was sagt. Der "Mailserver" wird also nur PGPKeys nutzen, die er aus vertrauenswürdigen Quellen hat, die zertifiziert sind oder die z.B. über einen Fingerprint verifiziert werden können.
Das Konzept des TrustedWeb funktioniert ja nur dadurch, dass die Benutzer bewusst einem Schlüssel vertrauen oder nicht.
Du musst ja auch den Fall abdecken, dass du von einem Benutzer keinen vertrauenswürdigen Schlüssel hast. Das muss auf jeden Fall der Benutzer selbst entscheiden, ob er diesen verwenden will.

2) Wie soll der "böse Mann" die eMails mit deinem geheimen Schlüssel verschlüsseln? Wo soll er den her haben?
Den geheimen brauch er nicht. Es reicht der öffentliche. Den hat er.


Zuerst war ich etwas skeptisch bei deiner Idee. Jedoch bei weiteren Überlegungen denke ich, dass das nach dem obigen, stark eingegrenzen Einsatzgebiet doch durchaus eine sinnvolle Anwendung sein kann. Insbesondere das Vermeiden von Plugins für die Email-Programme finde ich sehr gut. Genau genommen ist das der für mich wichtigste Punkt. Das "Verstecken" der Funktionalität des Verschlüsselns ist in meinen Augen eher schlecht. Der Benutzer muss wissen, wann seine Mails verschlüsselt werden. Denn es wird ja auch nicht für jede Adresse ein vertrauenswürdiger Schlüssel vorhanden sein. Von daher werden auch weiterhin Emails unverschlüsselt übers Netz gehen.
 

babuschka

Top Contributor
hupfdule hat gesagt.:
Um das ganze mal einzugrenzen: Was du versuchst, ist ein Mailserver, der ausschließlich für Privatanwender gedacht ist, immer auf dem selben Rechner läuft und quasi als Proxy zwischen dem Client und dem eigentlichen Mailserver fungiert.
Genau!
Ein Proxy-PGP-Mailserver sozusagen :)

Das Konzept des TrustedWeb funktioniert ja nur dadurch, dass die Benutzer bewusst einem Schlüssel vertrauen oder nicht.
Du musst ja auch den Fall abdecken, dass du von einem Benutzer keinen vertrauenswürdigen Schlüssel hast. Das muss auf jeden Fall der Benutzer selbst entscheiden, ob er diesen verwenden will.
Stümmt. Lässt sich, wie du sagst, aber mit ein paar wenigen Meldung aus dem Server relativ einfach lösen.

Valmar hat gesagt.:
2) Wie soll der "böse Mann" die eMails mit deinem geheimen Schlüssel verschlüsseln? Wo soll er den her haben?
hupfdule hat gesagt.:
Den geheimen brauch er nicht. Es reicht der öffentliche. Den hat er.

Öhm. Quote von Hilefoks:
hilfefoks hat gesagt.:
(...) verschlüsselt sie mit meinem echten(<- !!) Key wieder (...)

Zuerst war ich etwas skeptisch bei deiner Idee. Jedoch bei weiteren Überlegungen denke ich, dass das nach dem obigen, stark eingegrenzen Einsatzgebiet doch durchaus eine sinnvolle Anwendung sein kann. Insbesondere das Vermeiden von Plugins für die Email-Programme finde ich sehr gut. Genau genommen ist das der für mich wichtigste Punkt. Das "Verstecken" der Funktionalität des Verschlüsselns ist in meinen Augen eher schlecht. Der Benutzer muss wissen, wann seine Mails verschlüsselt werden. Denn es wird ja auch nicht für jede Adresse ein vertrauenswürdiger Schlüssel vorhanden sein. Von daher werden auch weiterhin Emails unverschlüsselt übers Netz gehen.
Mir ist inzwischen auch schon eine noch andere Anwendung in den Sinn gekommen.
Was, wenn man das Tool in einem Netzwerk zum Beispiel in einer Firma einsetzen würde?
Man müsste es nur geringfügig modifizieren. Das würde dann so aussehen:
Ein Administrator konfiguriert einen lokalen Mailserver mit eben dieser PGP-Funktion.
Alle User innerhalb dieses Netzwerk müssen sich verpflichten einen Account bei diesem Mailserver einzurichten (Zum Beispiel über ein HTTP interface). Anschließend werden noch die "richtigen" Accountdaten von z.B. GMX beim Mailserver eingetragen und schon gehts los: Ab jetzt werden alle eMails, die aus dem Netzwerk raus oder rein gehen über den Mailproxy geleitet und möglichst gut verschlüsselt und/oder signiert. Der Administrator überwacht das ganze und übernimmt die Konfiguration des servers. Anwender können über HTTP ihren Account verwalten und zum Beispiel User einstellen, denen sie vertrauen bzw. nicht vertrauen.
Das wäre zum Beispiel ein ganz konkretes Anwendungsszenario um eMailverschlüsselung bzw. -signierung in Firmen netzwerken zu realisieren. Die "blöden Sekretärinnen" müssten also nur einen Account registrieren und in ihrem eMailprogramm den Proxy Server statt dem richtigen Mailserver eintragen..
 

hupfdule

Top Contributor
Valmar hat gesagt.:
Valmar hat gesagt.:
2) Wie soll der "böse Mann" die eMails mit deinem geheimen Schlüssel verschlüsseln? Wo soll er den her haben?
hupfdule hat gesagt.:
Den geheimen brauch er nicht. Es reicht der öffentliche. Den hat er.

Öhm. Quote von Hilefoks:
hilfefoks hat gesagt.:
(...) verschlüsselt sie mit meinem echten(<- !!) Key wieder (...)
Genau. Mit dem echten öffentlichen Schlüssel. So wie du den falschen öffentlichen Schlüssel des Angreifers verwendest, obwohl du meinst, es wäre der echte öffentliche Schlüssel.


Was, wenn man das Tool in einem Netzwerk zum Beispiel in einer Firma einsetzen würde?
Bei solchen Sachen bin ich eher skeptisch. Diese Versuche einer echten transparenten Verschlüsselung halte ich für eher fragwürdig. Es gibt bereits Ansätze in der Richtung. Mir war so, als wäre GeNUGate ein solcher Ansatz, sieht jetzt aber mehr nach reinen Firewall-Lösungen aus.

Alle User innerhalb dieses Netzwerk müssen sich verpflichten einen Account bei diesem Mailserver einzurichten
Das muss nicht sein. Das kann (und soll) der Administrator erledigen.
Anschließend werden noch die "richtigen" Accountdaten von z.B. GMX beim Mailserver eingetragen und schon gehts los
Ich würde das Passwort meines privaten Accounts bestimmt nicht auf einem Server ablegen.... Allerdings haben Firmen in der Regel ihre eigenen Mailserver, so dass man das nicht muss. Auch ist deine Idee nur für solche firmeninternen Mailserver brauchbar.

Anwender können über HTTP ihren Account verwalten und zum Beispiel User einstellen, denen sie vertrauen bzw. nicht vertrauen.
Und das ist schon ein gravierender Schwachpunkt. Du versuchst dein gerade noch klar umrissenes Einsatzszenario zu erweitern und machst deine Idee damit unbrauchbar. Der PGP-Proxy läuft damit nicht mehr auf dem Client-PC. Er kann daher auch nicht mit dem Benutzer interagieren. Damit tritt genau das ein, was
Hilefoks gesagt hat.

Meine Meinung: Das o.g. Einsatzszenario ist gut. Dafür ist das gut zu gebrauchen. Versuch nicht mehr draus zu machen. Gerade der zentrale, transparente Einsatz ist Unfug. Das funktioniert mit PGP, bzw. dem WebOfTrust nicht.
 

babuschka

Top Contributor
Okay, dann jetzt konkret zur Umsetzung erstmal nur der Mailserver.
Wie könnte ich das denn jetzt mal angehen? (In JAVA)

Einer hat weiter oben mal gepostet, dass man als Ansatz die Protokolle implementieren könne.
Hilft mir ehrlich gesagt nicht sehr viel :)
 

hupfdule

Top Contributor
Recht hat er aber. Zumindest, wenn es an die tatsächliche Implementierung geht. Vorher jedoch musst du deine Idee noch viel stärker festlegen. Sinnvoll ist, wenn du dir selbst ein Pflichtenheft schreibst.

Kläre zuerst noch mal detailliert, was dein Mailserver leisten soll. Also das Einsatzszenario aus Sicht des Benutzers (jedoch möglichst detailliert). Dann teile das Ganze in Funktionalitäten auf. Das wären z.B. Empfangen von Mails, Verschlüsseln von Mails, Senden von Mails, etc. Halt ein typisches Use-Case (sinnvoll wäre auch, wenn du ein UML-Tool einsetzt).

Dann erstell die Architektur deiner Anwendung (sinnvollerweise auch in UML). Erstelle die Bildschirmmasken, die für die Interaktion mit dem Benutzer nötig sind (auf Papier oder in einem Grafikprogramm, bei Bedarf auch gern mit einem GUI-Editor wie Matisse von Netbeans).

Erst wenn das alles steht (also eben das gesamte Pflichtenheft), macht es Sinn mit der Implementierung zu beginnen.

Wie gesagt, mir scheint das Projekt recht interessant und sinnvoll. Ich könnte mir vorstellen, dass ich auch daran mitarbeite.
 

hupfdule

Top Contributor
Valmar hat gesagt.:
Uhm, ich weiss nicht, ob sowas wirklich nötig ist...
Das Programm wird ja nicht so groß, oder?

*lach* Kommt drauf an, was du erreichen willst. Wenn du es wirklich erst mal nur zum Lernen machen willst, dann brauchst du das Pflichtenheft nicht. Allerdings solltest du dir im Klaren sein, dass du das fertige Produkt dann mit Sicherheit nicht wirklich einsetzen wirst, weil du viel zu viele Konzeptschwächen dann drin hast. Wenn es dir darum geht, wirklich etwas auf die Beine zu stellen, was am Ende auch von Leuten außer dir selbst benutzt wird, dann solltest du die Planungsphase nicht überspringen. Sie ist im Grunde wichtiger als das eigentliche Programmieren.
 

babuschka

Top Contributor
He, he. Ja, schon klar.
Soll ja kein kommerzielles Produkt werden ;)

Also Open Source, weil ich wahrscheinlich auf etwas Source Code von anderen Leuten zurückgreifen muss (z.B. GnuPG für die PGP Funktionen).

Mir is schon klar dass für ein ordentliches Konzept Pflichtenheft dergleichen wichtig ist.

Allerdings will ich das Ding erstmal nur "runterschreiben" und sozusagen "on the fly" mir ein Konzept überlegen und während dem Entwickeln immer wieder Rat und Ideen einholen. Da is ein Konzept relativ schnell übern Haufen geworfen :)

Anschließend, falls sich das Programm bewöhrt und Anklang findet, könnte ich mir eine "richtige" Realisierung vorstellen.

Ich persönlich hab die Erfahrung gemacht, dass mit dieser Methode recht ordentliche Programme entstehen, weil man ja die Erfahrung des vorherigen Programs hat :)
In den Softwareprojekten in denen ich bisher mitgewirkt habe, habe ich immer festgestellt dass Konzepte meist nur den den 1. oder 2. Meilenstein überleben und am Ende kommt was ganz anderes bei raus, wie gedacht :)

Wenn man also genug Zeit hat finde ich es sehr lohnenswert, erstmal drauf loszuprogrammieren, wenn man, so wie ich jetzt, von der Technik an sich noch wenig Ahnung hat. Dann baut man später bei der tatsächlichen Realisierung weniger Fehler oder kann Fehler vermeiden, über die man vorher schon gestolpert ist. Das kommt einem sauberen Source Code auch oft zugute.

Ist mir schon klar, dass das in größeren Projekten nicht machbar ist, insbesondere wenn man einen kommerziellen Zweck verfolgt und für einen Kunden programmiert.

Aber wenn man genug Zeit hat, finde ich meine Methode eigentlich nicht schlecht.

My 2 Cents :)
 

hupfdule

Top Contributor
Klar, kein Thema. Wenn du die Zeit und Lust hast, das noch mal zu beginnen, ist das eine Option. Auf jeden Fall viel Spaß dabei. :)
Und halt uns ruhig etwas auf dem Laufenden über das Projekt.
 

Yzebär

Bekanntes Mitglied
Für private Projekte, die man hauptsächlich zum Lernen benutzt, halte ich es auch für übertrieben, großartig Zeit in Konzepte und Design zu investieren. Hat man die Sache quick and dirty durchgezogen, hat man danach die nötige Erfahrung, sinnvoll zu planen und zu designen, um das Projekt noch einmal sauber aufzusetzen.
 

babuschka

Top Contributor
Ich werd hier sicher öfters mal auftauchen, wenn beim Entwickeln java nicht das macht, was ich will :D

Danke für all den Rat und die Kritik übrigens

Hier aber schonmal meine erste Frage: Wie "implementier" ich denn die Protokolle? :)
 

hupfdule

Top Contributor
Valmar hat gesagt.:
Wie "implementier" ich denn die Protokolle? :)

Ähm, was genau meinst du denn damit? Womit hast du das Problem?

Als erstes musst du dich mal informieren, was diese Protokolle leisten müssen. Dazu gibts die RFCs (die sind aber nicht gerade kurz ;-)) [1][2]

Und für beide musst du einen ServerSocket aufmachen. Dieser lauscht auf eingehende Verbindungen und arbeitet diese ab (möglichst in einem eigenen Thread).

[1] http://tools.ietf.org/html/rfc2821
[2] http://tools.ietf.org/html/rfc1939
 

babuschka

Top Contributor
Ah, ja. Genau letzteres macht mir etwas Kopfzerbrechen.
Da weiss ich nicht so genau wie ich das machen soll.
Gibts da irgendwelche Klassen dazu, die das machen?
Also irgendwas, was mir ein Event schmeisst, wenn an einem Socket was ankommt.
 

hupfdule

Top Contributor
Lies dir mal ein Tutorial zu Sockets durch.
Der genannte ServerSocket ist genau dazu da. Er belegt einen Port auf dem Server und jedes mal, wenn eine neue Verbindung rein kommt, erstellt er für dich einen Socket, über den du dann die Kommunikation laufen lässt.

Wenn du das ganze sowieso hauptsächlich zum Lernen unternimmst, dann lohnt es sich für dich vlt. statt der "normalen" Socket in java.io das java.nio package anzuschauen. Da gab es irgendwo mal ein recht schönes Einsteiger-Tutorial zu. Kannst ja mal das Forum durchsuchen. Vlt. gibt es hier den Link darauff.
 

wranger

Mitglied
Moin,

das Projekt hört sich sicher interissant an, ich hatte jetzt auch nicht die Zeit alles zu lesen, möchte an dieser Stelle jedoch noch auf einen Punkt hinweisen. Wenn ich das richtig verstanden habe, so läuft dein Server lokal beim Anwender.

Als Spamschutz sperren viele Emailanbieter (gmx, yahoo, usw.) lokale IP-Adressen die z.B. der Telekom, 1&1, usw. gehören. Sollte von diesen eine Mail verschickt werden, so ist die Warscheinlichkeit, dass die Mail ankommt doch ehr gering.

Ein Hinweis, falls ichs richtig verstanden habe!
 

hupfdule

Top Contributor
wranger hat gesagt.:
Wenn ich das richtig verstanden habe, so läuft dein Server lokal beim Anwender.
So weit richtig.

Ich weiss nicht ob ichs richtig verstanden habe, als Spamschutz sperren viele Emailanbieter (gmx, yahoo, usw.) lokale Ip-Adressen die z.B. der Telekom, 1&1, usw. gehören. Sollte von diesen eine Mail verschickt werden, so ist die Warscheinlichkeit, dass die Mail ankommt doch ehr gering.
So weit falsch. ;-)

Er will ja keinen vollständigen Mailserver daraus machen, sondern nur so etwas wie einen Proxy. Angenommen eine Person mit Adresse ich@1und1.de schickt eine Mail an du@gmx.de, dann läuft die Mail so:

Code:
 MUA ------> 1&1 ------> GMX ------> MUA
     SMTP        SMTP        POP

Mit Proxy würde das so aussehen:
Code:
 MUA ------> Proxy ------> 1&1 ------> GMX ------> MUA
     SMTP          SMTP        SMTP        POP

Der 1&1 Mailserver sieht keinen Unterschied zwischen dem MUA und dem Proxy. Dieser Proxy schickt die selben Authentifizierungsdaten mit, die auch der MUA schicken würde. Somit gibt es hier kein Problem.


BTW: MUA == Mail User Agent
 
G

Guest

Gast
Ja, das hast du richtig verstanden.
Das ist natürlich ein Problem..

Man könnte vielleicht einen eigenen eMailanbieter bauen, der diese eMail forwarded und eine kleine Gebühr damit kassieren :D :D
 

wranger

Mitglied
hupfdule hat gesagt.:
Anonymous hat gesagt.:
Ja, das hast du richtig verstanden.
Hat er nicht.
Das ist natürlich ein Problem..
Ist es nicht. :)

Hätte es aber sein können! :D
Man könnte vielleicht einen eigenen eMailanbieter bauen, der diese eMail forwarded und eine kleine Gebühr damit kassieren :D :D
Supper Idee. Genau das, was die Benutzer in Scharen anzieht. :)

Ahh jetzt! :bae: :###
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Wie kann man einen einfachen E-Mail Server schreiben Netzwerkprogrammierung 2
E Custom E Mail Adresse mithilfe Serversocket oder ähnliches Netzwerkprogrammierung 21
N Link aus einer E-Mail aufrufen Netzwerkprogrammierung 2
M Mit Java Mail Mails an Webmailer schicken Netzwerkprogrammierung 1
T E-Mail versenden. Netzwerkprogrammierung 8
Niggo_ Probleme mit Java Mail Netzwerkprogrammierung 14
K Probleme bei HTML-Mail-Abruf mit IMAP bei 1und1 Netzwerkprogrammierung 2
M E-Mail - Verbinden zu web.de Netzwerkprogrammierung 8
S mail versand Netzwerkprogrammierung 1
G Mail senden funktioniert nicht mit SSL Netzwerkprogrammierung 7
D Java Desktop Mail, vorbereitete Mail Netzwerkprogrammierung 5
D JavaMail: HTML Code einer Mail Netzwerkprogrammierung 9
M Mail über Exchange versenden Netzwerkprogrammierung 13
T Java Mail port ändern Netzwerkprogrammierung 4
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
F TLS bei mail benutzen Netzwerkprogrammierung 2
T E-Mail über javax.mail.Message Netzwerkprogrammierung 2
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
N E-mail versenden Netzwerkprogrammierung 4
A html - E-mail - Bilder Netzwerkprogrammierung 4
A attachment einer Mail speichern Netzwerkprogrammierung 5
G Validierung von Internetadressen - Kontroll Mail oder so. Netzwerkprogrammierung 4
B log4j e-mail appender Netzwerkprogrammierung 4
S Mail anhang in InputStream packen Netzwerkprogrammierung 5
R Mail und Mime Type Netzwerkprogrammierung 4
F Java Mail . Exception java.lang.NoClassDefFoundError Netzwerkprogrammierung 2
B Url-Link aus einer E-Mail aufrufen Netzwerkprogrammierung 2
G Java Mail etwas unsicher? Netzwerkprogrammierung 4
H Mail über URLConnection Netzwerkprogrammierung 8
G MAIL API Netzwerkprogrammierung 4
K Problem bei Mail-Versand mit Anhängen Netzwerkprogrammierung 2
L JavaMail: Mail in Posteingang aber nicht in Versendet Netzwerkprogrammierung 2
M SMTP-Mail Netzwerkprogrammierung 2
E smtp Zugriffsproblem mit Java Mail API Netzwerkprogrammierung 3
H E-Mail Programm Netzwerkprogrammierung 3
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
E Server mit GUI Netzwerkprogrammierung 4
E FTP FTPS Server gibt Fehlernachricht "522 SSL/TLS required on the data channel" zurück Netzwerkprogrammierung 1
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
Eigenen Rechner als Server? Netzwerkprogrammierung 16
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
J Datei Download vom Server Netzwerkprogrammierung 8
izoards Mehrere TCP Verbindungen auf einen Server [alles Local] Netzwerkprogrammierung 2
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
K Threads/Server/telnet Fehler Netzwerkprogrammierung 2
J Multithreaded-Server Netzwerkprogrammierung 21
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
L30nS RMI RMI-Server kann Dialog nicht volkommen anzeigen Netzwerkprogrammierung 2
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
F NodeJs-Server auf Firebase hosten ? Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
H HTTP Glassfish (v5) Application Server - Bibliothek zur Verfügung stellen Netzwerkprogrammierung 4
B HttpClient - Server (Jetty) - getInputStream - EOF Netzwerkprogrammierung 3
P TCP-Server Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
F Server für Java Applikationen Netzwerkprogrammierung 16
H Einfacher Server funktioniert nicht Netzwerkprogrammierung 1
G Server-Client IO Problem Netzwerkprogrammierung 6
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
T HTTPS-Requests an Server: POST-Parameter kommen nicht an Netzwerkprogrammierung 5
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
T Jetty Server LOGGING Netzwerkprogrammierung 1
L Strings an Server senden und in MYSQL speichern? Netzwerkprogrammierung 3
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
T server empfängt nur 1 Buchstaben vom String Netzwerkprogrammierung 1
S Spiel mit Server programmieren Netzwerkprogrammierung 2
N Post u Head Request an Server Netzwerkprogrammierung 4
J Socket Ein Chat Server Tutorial Netzwerkprogrammierung 8
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
J Socket Tutorial zu Multiplayer Server schreiben? Netzwerkprogrammierung 5
S Java Chat Server Netzwerkprogrammierung 8
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
D Socket Message an einen Server senden? Netzwerkprogrammierung 8
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
KaffeeFan Programmierung mit Cloud-Server Netzwerkprogrammierung 0

Ähnliche Java Themen

Neue Themen


Oben