Announcement

Collapse
No announcement yet.

SMTP Server mit Java

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SMTP Server mit Java

    Hallo

    ich stehe vor einem Problem, dass ich EMails nach SMS versenden muss. Die Engine, die die SMS Versendet habe ich bereits fertig. Ich habe das Problem, dass die EMails von einer Firewall kommen und so aussehen:

    Empfäger (Handynummer): [email protected]
    Text: zu sendender Text.

    Ich würde gerne einen Mailserver programmieren, der als Relay für für diese Mails dient und diese verarbeiten und aufgearbeitet an die SMS Engine weitergeben.

    Ich habe leider im Internet keinerlei beispiele für die Implementierung eines SMTP Servers in Java gefunden.

    Kennt von Euch jemand ein brauchbares Beispiel.

  • #2
    Originally posted by RudiJ View Post
    Ich habe leider im Internet keinerlei beispiele für die Implementierung eines SMTP Servers in Java gefunden.
    ob du da gut gesucht hast? Siehe z.B. Apache James

    Comment


    • #3
      Treffer 4-6

      http://www.google.de/search?q=java+s...-a&safe=images

      ergeben JAVA SMTP Server
      Christian

      Comment


      • #4
        uppps...

        ... muss wohl mal zu Fielmann. Danke

        Comment


        • #5
          Verstehe leider nur Bahnhof ;(

          Hallo Leute,

          ich habe gedacht, dass ich mit COMP 361 ein gutes Beispiel für den SMTP Server habe... Leider haben die Entwickler in der SMTPConnection.java viele Teile mit /* Fill in */ freigelassen. Ich bin auch nicht gerade der Guru was das SMTP (ist auch eigentlich nicht das Kernproblem meines Projektes) Protokoll angeht... kann mir da bitte jemand helfen. Einige Sachen wie HELO oder EHLO oder QUIT bekomme ich ja noch hin aber dann hört es auf.

          Hier die Klasse:
          http://www.cs.ust.hk/~golin/comp361_...onnection.java

          Comment


          • #6
            Originally posted by RudiJ View Post
            Hallo Leute,

            ich habe gedacht, dass ich mit COMP 361 ein gutes Beispiel für den SMTP Server habe... Leider haben die Entwickler in der SMTPConnection.java viele Teile mit /* Fill in */ freigelassen. Ich bin auch nicht gerade der Guru was das SMTP (ist auch eigentlich nicht das Kernproblem meines Projektes) Protokoll angeht... kann mir da bitte jemand helfen. Einige Sachen wie HELO oder EHLO oder QUIT bekomme ich ja noch hin aber dann hört es auf.

            Hier die Klasse:
            http://www.cs.ust.hk/~golin/comp361_...onnection.java
            Nach einem 'echten' Beispiel sieht mir das aber nicht aus, eher nach ein Konstrukt. Ist ja echt viel Arbeit (und Recherche) das alles zu füllen.

            Zitat von der Mainseite:

            In this programming assignment you will implement a SMTP server that receives mail from remote hosts. Your task is to:

            1. Program the SMTP interaction between the SMTP server and remote host.
            2. Save the mail content and attachments in system.
            Also ist es eine Studienaufgabe die zu lösen wäre...
            Zuletzt editiert von alexdgg; 24.09.2010, 14:04.
            AlexDgG

            Es gibt keine dummen Fragen. Nur dumme Antworten!

            Comment


            • #7
              Originally posted by alexdgg View Post
              Nach einem 'echten' Beispiel sieht mir das aber nicht aus, eher nach ein Konstrukt. Ist ja echt viel Arbeit (und Recherche) das alles zu füllen.

              Zitat von der Mainseite:



              Also ist es eine Studienaufgabe die zu lösen wäre...


              Kennt denn niemand ein rudimentäres SMTP Serverbeispiel...

              Comment


              • #8
                http://james.apache.org/server/rfclist/smtp/rfc0821.txt

                fürs selber machen...
                Christian

                Comment


                • #9
                  Einen extra Mailserver benutzen?

                  Hallo RudiJ,

                  könntest Du nicht einen eigenen Mailserver (den es in Eurem Netzwerk vielleicht sogar schon gibt). Für den Empfang der Mails benutzen? Den könnest Du dann z.B. alle 5min nach neuen Mails fragen und diese dann ggf. per SMS weiterleiten. Dann wäre Dein Javaprogramm nur noch ein Mail-Client und kein Server mehr. Das würde Dir einiges leichter machen. Oder gibt es Anforderungen, die dagegen sprechen?

                  Gruß ngomo
                  http://www.winfonet.eu

                  Comment


                  • #10
                    Originally posted by ngomo View Post
                    Hallo RudiJ,

                    könntest Du nicht einen eigenen Mailserver (den es in Eurem Netzwerk vielleicht sogar schon gibt). Für den Empfang der Mails benutzen? Den könnest Du dann z.B. alle 5min nach neuen Mails fragen und diese dann ggf. per SMS weiterleiten. Dann wäre Dein Javaprogramm nur noch ein Mail-Client und kein Server mehr. Das würde Dir einiges leichter machen. Oder gibt es Anforderungen, die dagegen sprechen?

                    Gruß ngomo
                    Da es sich um eine Authentifizierung (Versenden von zweiteiligen Passwörtern) handelt, ist eine längere Wartezeit, wenn es ein EMail-Client ist, sehr unschön. Dies wir dann wohl von den Nutzern nicht angenommen, wenn diese einige Minuten auf das PW warten müssen.

                    Es ist leider alles andere als einfach einen SMTP-Server aufzusetzen, da sehr gute Kenntnisse des SMTP Protokolls Voraussetzung sind. Alle Beispiele die ich gefunden habe und OpenSource sind sind so ca. 5 bit 10 MB Sourcecode. Da kann ich mir den Kernel auch nicht so ohne weiteres raus extrahieren.

                    Ich werde mal versuchen diese Studienaufgabe zu lösen. Was allerdings auch nicht ohne ist.

                    Wir habe bei uns einen MS-Exchange 2003 im Einsatz vieleicht kennt ja einer eine Möglichkeit dem Exchange dieses aufzubürden.
                    Zuletzt editiert von RudiJ; 28.09.2010, 09:07.

                    Comment


                    • #11
                      Hallo

                      ich habe jetzt so ein Ding hinbekommen


                      Code:
                      /* Wait for data session */
                                  while (!quit && !HELOagain) {
                      
                                      if ((requestCommand = fetch()).length() == 0)
                                          quit = true;
                                      /* If the client send the appropriate command */
                                      else if (requestCommand.substring(0, 4).equals(SMTP_DATA)) {
                                          reply(SMTP_354);
                                          /* Call another method to handle this session */
                                          receiveMessage(sender, receiver);
                                          /* tell the client the message is saved */
                                          reply(SMTP_250);
                                          HELOagain = true;
                                      }
                      
                                      /* If the client says HELLO again */
                                      else if (requestCommand.substring(0, 4).equals(SMTP_HELO) || requestCommand.substring(0, 4).equals(SMTP_EHLO)) {
                                          if (parseHELO(requestCommand))
                                              HELOagain = true;
                                      }
                      
                                      /* If the client want to quit this session */
                                      else if (requestCommand.substring(0, 4).equals(SMTP_QUIT))
                                          quit = true;
                      
                                      /* If the client send the command that is not expected to see now, output an error */
                      //                                else if (requestCommand.substring(0,4).equals(/* Fill in */) ||
                      //                                                 requestCommand.substring(0,4).equals(/* Fill in */)) {
                      //                                        reply(/* Fill in */);
                      //                                }
                      
                                      /* If unrecognized command is received, output an error */
                                      else {
                                          reply(SMTP_500);
                                      }
                                  }
                              }
                      Habe aber noch ein kleines Problem....

                      mit dem Block:

                      Code:
                      /* If the client send the command that is not expected to see now, output an error */
                      //                                else if (requestCommand.substring(0,4).equals(/* Fill in */) ||
                      //                                                 requestCommand.substring(0,4).equals(/* Fill in */)) {
                      //                                        reply(/* Fill in */);
                      //                                }
                      komme ich nicht Klar. Kann sich jemand Denken, was das für SMTP Codes reinsollen


                      ... es funktioniert übrigens auch ohne diesen Teil... würde aber ungerne eine Exception riskieren...
                      Zuletzt editiert von RudiJ; 28.09.2010, 16:28.

                      Comment


                      • #12
                        Siehe Beitrag 8
                        Christian

                        Comment


                        • #13
                          Originally posted by Christian Marquardt View Post
                          Siehe Beitrag 8
                          ...wenn ich den nicht gelesen hätte würde der SMTP Server kaum laufen.
                          Ich könnte eine KONSTRUKTIVE Hilfe brauchen.
                          Zuletzt editiert von RudiJ; 28.09.2010, 17:23.

                          Comment


                          • #14
                            Hallo RudiJ,

                            ich habe mir Deine Vorlage

                            http://www.cs.ust.hk/~golin/comp361_...onnection.java

                            nochmal angesehen...
                            in den Stellen, die Du meinst, müssen die SMTP Kommandos abgefangen werden, die Chronologisch zum Protokoll nicht passen.

                            Also nach MAIL FROM kann nicht DATA kommen, da ja noch RCPT dazwischen fehlt. Da müsstest Du dann der Gegenstelle einen Fehlercode zurückliefern. '503 Bad sequence of commands' wäre dann der richtige Fehler.

                            Ich denke, diese Blöcke könntest du Dir auch schenken, da jeweils das letzte
                            Code:
                            else
                            {
                               reply(SMTP_500);
                            }
                            eh bei einer Fehlerhaften Sequenz einen Fehler erzeugt. Der Passt zwar nicht richtig vom Code... aber ich denke das Du eh keinen Superprofessionellen Mailserver programmieren willst, sonder nur SMS versenden willst.

                            Gruss
                            AlexDgG

                            Es gibt keine dummen Fragen. Nur dumme Antworten!

                            Comment


                            • #15
                              Originally posted by alexdgg View Post
                              Hallo RudiJ,

                              ich habe mir Deine Vorlage

                              http://www.cs.ust.hk/~golin/comp361_...onnection.java

                              nochmal angesehen...
                              in den Stellen, die Du meinst, müssen die SMTP Kommandos abgefangen werden, die Chronologisch zum Protokoll nicht passen.

                              Also nach MAIL FROM kann nicht DATA kommen, da ja noch RCPT dazwischen fehlt. Da müsstest Du dann der Gegenstelle einen Fehlercode zurückliefern. '503 Bad sequence of commands' wäre dann der richtige Fehler.

                              Ich denke, diese Blöcke könntest du Dir auch schenken, da jeweils das letzte
                              Code:
                              else
                              {
                                 reply(SMTP_500);
                              }
                              eh bei einer Fehlerhaften Sequenz einen Fehler erzeugt. Der Passt zwar nicht richtig vom Code... aber ich denke das Du eh keinen Superprofessionellen Mailserver programmieren willst, sonder nur SMS versenden willst.

                              Gruss
                              Danke, das ist es ... Sehe es jetzt auch. Ich lasse diese Blöcke einfach weg.

                              Comment

                              Working...
                              X