Leer puerto SMTP para pequeno server SMTP

Hola;
Companeros me podrian ayudar pasandome un pequeno tutorial de como leer el puerto 25, para poder crear cuentas de correo y recibir en mi servidor dichos correos, e visto que lo tengo que hacer con Socketserver, pero no encuentro info al respecto solo de como mandar correos usando GAMIL o mi servidor pero necesito de crear un pequeno server de correo para poder recivirlos.

DE antemano gracias

Miguel

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Hay dos modelos

Algunas consideraciones primero: Los puertos menores a 1024 están reservados para root o usuario administrador, así que para pruebas necesitas usar 1025 o algo asi (deberia ser configurable en tu aplicacion)

El primero es un poco más fácil de explicar: thread-per-connection.

ServerSocket server = null;
try {
  server = new ServerSocket(puerto);
} catch (BindException ex) {
  //puedes terminar el programa, porque no puedes escuchar en el puerto
  System.exit(1);
}
while (true) {
  try {
    Socket sock = server.accept();
    Sesion ses = new Sesion(socket);
    new Thread(ses).start();
  } catch(IOException ex) {
    //Maneja la excepcion
  }
}

tu clase Sesion debe ser Runnable y en el run() vas a poner el código para manejar la sesión de SMTP (esperar el HELO, contestar, etc etc).

El otro esquema es con los selectores de java.nio y ahi no tienes que manejar tantos hilos; de cualquier forma, uses el esquema que uses, te recomiendo llevar un control de las conexiones abiertas para que no aceptes demasiadas y te vayan a tirar todo el sistema (para ello necesitas un contador que incrementas despues de cada accept() y que decrementas con un metodo que invocan las Sesiones cuando terminan). También la Sesion debe cerrar su conexión si pasa mucho tiempo inactiva (esperando a leer datos) para ello puedes invocar socket.setSoTimeout(20000) por ejemplo para que se lance una SocketTimeoutException si no recibes datos en 20 segundos; cachas esa excepcion, cierras y notificas al controlador central.

RFC DEL SMTP y POP

Adicionalmente a la información que te proporciona Ezamudio, si quieres realizar la implementación de un servidor smtp y pop, es necesario que conozcas a fondo como funcionan respectivamente esos protocolos, para eso te dejo las ligas de los RFC's donde aprender como funcionan estos protocolos.

http://www.ietf.org/rfc/rfc0821.txt
http://www.ietf.org/rfc/rfc1939.txt

Saludos

Imagen de cororo

hola, Muchas gracas por

hola,
Muchas gracas por su interes, sip de hecho si note eso Ezamudio que no podia usar el puerto 25 XD lo que ise cree un pequeno como "chat" usando sockets y si funcionaba, josebetomex, gracias por tus pags apenas las voy haber , te lo agradesco,
Senores saben como ver la ip publica osea la getway o la que le llega al modem cuando ponemos ipconfig pero desde java