Diseño de un servicio para enviar correos

Recientemente alguien muy importante en mi vida me preguntaba sobre un problema que tenía en su código y después de platicar un rato resultó que lo que estaba haciendo era consumir un "servicio" web que a su vez enviaba correos.

Era algo asi:

Y lo que estaba haciendo era abrir una conexión HTTP, crear la cadena "encoded" conectarse al server, y leer la respuesta del server.

Y yo le preguntaba, no era mas fácil que hicieras todo esto directamente al servidor SMTP?!!! Hay varias razones que no vienen al caso.

Al principio me parecía bastante absurdo tener que hacer todo este codigo ( HttpURLConnection . open, burfferenreader read, write etc. etc. ) para consumir este servicio, e incluso un workaround sería hacer una biblioteca a la que le dijeras:

 

Y esta biblioteca interamente hiciera todo ese código ( una de las razones era "simplificar" el envío de correos al hacer un "servicio" reutilizable ) y que incluso pudiera después cambiarse sin romper a los demás para que usara javax.mail .

Después me quede pensando que quizá el diseño no era tan trivial ( o quizá si )

La pregunta es: Cual seria realmente un buen diseño para un servicio que envíe correos? Una biblioteca como la descrita? Unaaplicaciónn web? Usar SMTP directamente? Un webservice? Un service bus?

Suponiendo que lo que se pretende es simplificar y reutilizar un servicio para enviar correos por varias aplicaciones.

Ahi se los dejo nomas para pasar el rato.

Saludos.

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.

Mail + Queue

Pues en Java es un poco costoso (en cuenato a tiempo nos referimos) y por eso es importante realizar esa tarea de forma asincrona. En mi caso, utilicé un QueueManager para recibir los mensajes que se pretenden enviar, y ese Queue se comunica directamente con el servicio de envio de correo. Aqui puedes exponer un WS que deposite el mensaje en la cola (no directamente en el servicio de envio de correos) para que cualquier sistema tuyo/ajeno pueda depositar mensajes.

Especificamente para sistemas escritos en Java claro que el WS no es la mejor opción, puedes obtener la cola directamente con JMS. No sé si sea realmente la mejor forma pero funciona bastante chido

Imagen de beto.bateria

Requerimientos, si ignoras

Requerimientos, si ignoras los requerimientos puedes crear una super aplicacion que no va a servir de nada para quien la va a utilizar (cliente o empresa en donde trabajas).

¿Que van a utilizar para comunicarse: vpn, http, dispositivo movil, navegador, app desktop, todos los anteriores u otros?, ¿que tan importante es que llegue el mensaje, es de vida o muerte, es para diversion?.

podria ser una buena guia para definir como quedaria configurada la app.

Se podria considerar un servidor como este que llamara al servicio de mail.

Imagen de beto.bateria

Yo lo haria usando http con

Yo lo haria usando http con simple json, es una perdida de tiempo consumir servicios web, y mas cuando se usa el navegador, tambien pasaria la info por post, y pues lo que dice java.daba.doo se podria implementar con activemq.