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:
http://server?mailTo=some@mail.com&msg=blabalba&auth=token&etc=etc
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.
- Inicie sesión o regístrese para enviar comentarios
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
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 http://activemq.apache.org/ que llamara al servicio de mail.
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.