# Custom E Mail Adresse mithilfe Serversocket oder ähnliches



## ErfinderLabyrinth (25. Aug 2022)

hi,
ich möchte ein Server erstellen, wo man eine E-Mail zum Server sendet und der Inhalt in die Konsole geschrieben wird. Die Frage ist nur, wie ich den Serversocket oder ähnliches erstelle, sodass ich E-Mails empfangen kann

Ich benutze Windows 10 und Java 17


----------



## KonradN (25. Aug 2022)

Ich fürchte, dass es nicht so einfach funktioniert, wie Du Dir das vorstellst.

Email nutzt ein Protokoll, das Simple Mail Transfer Protocol (SMTP). Dazu gibt es dann RFCs, z.B. die 2821 (https://www.ietf.org/rfc/rfc2821.txt).
Dann gibt es eine ganze Reihe an RFCs, wie eine Email aussehen kann - fängt an mit RFC 822 aber da gibt es ganz viel z.B. 2822 (https://www.ietf.org/rfc/rfc2822.txt) aber auch mehrere zu MIME und Co.

Du kannst natürlich einen Server selbst erstellen, also ein Socket öffnen um dann dort das SMTP Protokoll zu implementieren. Dann kannst Du bei einem Client z.B. Deinen Server eintragen. Wenn Du aber generell Emails empfangen willst, dann brauchst Du auch den ganzen DNS Kram, d.h. eine Domain für die Dein Server als Mailserver eingetragen wurde und so. Je nachdem, was Du willst, kann das also relativ komplex werden.


----------



## temi (26. Aug 2022)

Möglicherweise hilft dir eine "fertige" Lösung, wie https://james.apache.org

Vermutlich wäre es allerdings am einfachsten, wenn du einen bestehenden (externen) Mailserver verwendest und die E-Mails dort nur abrufst.


----------



## ErfinderLabyrinth (26. Aug 2022)

KonradN hat gesagt.:


> Ich fürchte, dass es nicht so einfach funktioniert, wie Du Dir das vorstellst.
> 
> Email nutzt ein Protokoll, das Simple Mail Transfer Protocol (SMTP). Dazu gibt es dann RFCs, z.B. die 2821 (https://www.ietf.org/rfc/rfc2821.txt).
> Dann gibt es eine ganze Reihe an RFCs, wie eine Email aussehen kann - fängt an mit RFC 822 aber da gibt es ganz viel z.B. 2822 (https://www.ietf.org/rfc/rfc2822.txt) aber auch mehrere zu MIME und Co.
> ...


wie implementiere ich das SMTP Protokoll?


----------



## KonradN (26. Aug 2022)

Indem du dir die RFC Dokumente anschaust um zu verstehen, was das so hin und her gesendet wird. Ist ein einfaches, Textueilen-Basiertes Protokoll.


----------



## ErfinderLabyrinth (26. Aug 2022)

ich verstehe aber immer noch nicht so ganz, wie ich den ServerSocket konfigurieren muss, damit ich Emails empfangen kann


----------



## Jw456 (26. Aug 2022)

ErfinderLabyrinth hat gesagt.:


> ich verstehe aber immer noch nicht so ganz, wie ich den ServerSocket konfigurieren muss, damit ich Emails empfangen kann


Der Socket dient dazu zum Daten Austauschen. Mehr nicht. Welche Daten (Protokoll) da benutzt wird ist dem simlich egal.

Das musst du alles selber schreiben oder wie schon gesagt wurde ein Lib benutzen.


----------



## KonradN (26. Aug 2022)

Ein ServerSocket ist nur ein Teil, das auf einem Port auf Verbindungen wartet. Nicht mehr!

Also wie ein Reifen - und nun fragst Du: Was musst du mit den Reifen machen, damit Du damit nach Italien fahren kannst. 
--> Du musst da erst ein Auto bauen - da wird dann der Reifen nur ein kleines Teil sein. (Das wäre dann sozusagen des Protokoll, das Du implementieren willst. Du kannst Dir aber auch ein ganzes Auto kaufen oder komplexe Teile kaufen. Das muss man nicht selbst bauen!)
--> Du musst dann einen Weg finden, wie Du nach Italien kommst - das wäre hier dann das ganze drumherum, das Notwendig ist, damit da Dein Server überhaupt angesprochen wird. Und daran wirst Du generell nicht vorbei kommen.

Nur um sowas zu machen, musst Du verstehen, wie ein Auto funktioniert (Wie willst Du etwas programmieren, wenn Du nicht verstehst, wie es funktioniert?) und wie man es dann bedient.


----------



## LimDul (26. Aug 2022)

Ein Beispiel für Sockets findet sich hier: https://www.baeldung.com/a-guide-to-java-sockets

Und wie @KonradN schon sagte, ein Socket ist nur etwas um eine Verbindung herzustellen. Du konfigurierst den nicht für E-Mail Empfang, sondern du kannst darüber Daten empfangen. Diese Daten musst du dann gemäß des SMTP-Protokolls (Kleiner Überblick dazu z.B. hier: https://www.ionos.de/digitalguide/e-mail/e-mail-technik/smtp/) interpretieren und entsprechend reagieren.


----------



## ErfinderLabyrinth (26. Aug 2022)

Ich kenne mich mit Sockets und Serversocket aus. Mein Problem: ich weiß den richtigen port nicht d.H. ich erstelle zwar ein Serversocket, aber wenn ich die E-Mail sende, wird kein Socket / Verbindung geöffnet


----------



## KonradN (26. Aug 2022)

ErfinderLabyrinth hat gesagt.:


> Mein Problem: ich weiß den richtigen port nicht







__





						smtp port - Google Suche
					





					www.google.com
				




Der unverschlüsselte Standard-Port ist 25/tcp



ErfinderLabyrinth hat gesagt.:


> ich erstelle zwar ein Serversocket, aber wenn ich die E-Mail sende, wird kein Socket / Verbindung geöffnet


Was genau machst Du? Wenn Du mit einem Client eine Email versendest, dann gibst Du ja den SMTP Server mit Port an - da wäre es also egal, welchen Port Du verwendest.

Wenn Du mit Deinem Client eine Email absendest und diese an den Provider übergibst: Was hast Du wie konfiguriert, so dass Du erwartest, dass da eine Verbindung geöffnet wird?


----------



## temi (26. Aug 2022)

Hier ist eine Beschreibung, wie man eine Mail senden kann. Ich bin allerdings nicht sicher, ob es das ist, was du meinst.

https://www.baeldung.com/java-email


----------



## ErfinderLabyrinth (26. Aug 2022)

KonradN hat gesagt.:


> __
> 
> 
> 
> ...


Ich kann keinen Port angeben, wird nicht akzeptiert und der Port 25 funktioniert auch nicht, genauso wenig wie 2525 und 587


----------



## ErfinderLabyrinth (26. Aug 2022)

PS ich sende die Mail von Outlook. Funktioniert das oder muss ich einen anderen benutzen


----------



## KonradN (26. Aug 2022)

Was genau versuchst Du? Was gibst Du wie an. Ich habe das Gefühl, dass Du derzeit etwas versuchst, das so gar nicht klappen kann. Daher teile uns bitte die genauen Details mit!


----------



## temi (26. Aug 2022)

ErfinderLabyrinth hat gesagt.:


> PS ich sende die Mail von Outlook. Funktioniert das oder muss ich einen anderen benutzen


Hm, was hat jetzt ein Mail-Client (Outlook) mit deinem Problem zu tun? Das ist ja ein Stück Software, dass über irgendeinen Mailprovider deiner Wahl Mails sendet und empfängt.


----------



## Jw456 (26. Aug 2022)

wenn du es mit Outlook an deinen Eigenen Rechner der dann auch Server sein muss schicken willst. Musst du das auch in Outlook mit einen Kontoangeben. Dort ist dann deine IP die Server Adresse und den Port könntest du selber bestimmen am besten Standard 25

Das wird auch nicht gehen da Outloock ja immer prüft ob der Server Erreichbar ist. Beim Konto einrichten.


----------



## LimDul (26. Aug 2022)

Wie sieht den der Code für den ServerSocket aus, wie sieht die Konfiguration in Outlook aus?


----------



## ErfinderLabyrinth (26. Aug 2022)

Eine Sache, die mir gerade einfällt: Der Port ist nicht öffentlich, macht dies Probleme?


----------



## ErfinderLabyrinth (26. Aug 2022)

LimDul hat gesagt.:


> Wie sieht den der Code für den ServerSocket aus, wie sieht die Konfiguration in Outlook aus?


Code von Serversocket:

```
public static void main(String[] args) throws IOException {
        @SuppressWarnings("resource")
        ServerSocket socket = new ServerSocket(587);
        System.out.println(socket.getLocalSocketAddress().toString());
        Socket client = socket.accept();
        System.out.println("accepted");
        BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
        while (true) {
            System.out.println(reader.readLine());
            
        }
        
    }
```
Outlook hat die Standart Konfiguration


----------



## KonradN (26. Aug 2022)

ErfinderLabyrinth hat gesagt.:


> Outlook hat die Standart Konfiguration


Ohne Details kann man Dir nicht helfen. 

Was hast Du in Outlook konfiguriert?
Was genau versuchst Du, so dass Du eine eingehende Verbindung erwartest?

Ich vermute, dass Du einfach eine komplett falsche Vorstellung hast, wie der Email-Versand funktioniert. Aber ohne Details kann man das nur vermuten. Und da eine komplette Beschreibung das Forum schlicht sprengen würde, sehe ich so einfach keinen Ansatz dir zu helfen.

Wenn Du mit "Standard Konfiguration" meinst, dass Du ein Email Konto konfiguriert hast und Du somit alle Emails per SMTP an den Mailserver des Providers übergibst, dann ist die Frage: Was für eine Email versendest Du, damit die bei Dir ankommt?

Was wäre dazu notwendig?
a) Eine eigene Domain. Ich nehme da einfach einmal meine Domain kneitzel.de als Beispiel für das folgende Beispiel
b) In dieser Domain muss dann ein Mailserver eingetragen werden. Dazu dienen MX Einträge. Davon kann es mehrere geben. Bei mir sind das Einträge, die auf Google verweisen:  aspmx.l.google.com, alt1.aspmx.l.google.com, ... , alt4.aspmx.l.google.com. Das ist halt eine Funktionalität, dass es secondary Mailserver geben kann, die Emails auch annehmen können. Bei Deiner Domain bräuchtest Du dann einen Eintrag, der auf Deinen Server verweist.

Dann könntest Du eine Email an eine Adresse der Domain versenden und diese dem Provider übergeben. Der Mailserver des Providers schaut dann im DNS nach, welche Server verantwortlich sind um diese dann anzusprechen. Dazu muss der Server aber auch erreichbar sein vom Mailserver des Providers.

Was aber auch gehen kann: Der Client will ja per SMTP die geschriebene Mail los werden. Du kannst also ein Konto erstellen, das als SMTP Server Deinen Server angibt. Da kannst Du dann beliebige Daten konfigurieren. Also auch einen beliebigen Port. (Das geht bei dem Server 2 Server Transfer nicht. Da muss es ein Standard Port sein. Wobei da ein SSL verschlüsselter Port per default genommen wird.


----------



## LimDul (27. Aug 2022)

Was genau willst du eigentlich machen?

Variante a:
* Wenn jemand (egal wer) eine Mail an z.B. erfinderlabyrinth@example.com schickt, soll sie in deinem Java Programm landen?

Variante b:
* Du willst mit Outlook *direkt* mit deinem Java-Programm kommunzieren, so dass *jede Mail*, die *du* darüber versendest in deinem Java-Programm landet (und nicht beim Empfänger)


----------

