Comparativa real de implementación de envío de correos SMTP con Gmail en Spring Boot vs Phoenix/Swoosh, basada en el código fuente de Te Llevo App.
Lo que un veterano te da, lo que un joven con energía no posee… los dichosos CA certificates
5 iteraciones TLS para poder enviar un correo electrónico desde Elixir: cacerts: :undefined ➔ verify_none ➔ cacertfile ➔ max_path_length_reached ➔ verify_none otra vez.
Todo para enviar un correo electrónico desde Elixir.
En Java: agregas la dependencia, copias 30 líneas de código, y funciona de inmediato. El JDK trae su propio almacén de certificados CA raíz ($JAVA_HOME/lib/security/cacerts). STARTTLS con Gmail funciona out of the box. Sin configurar nada extra.
No es que Elixir sea malo. Swoosh tiene una API hermosa, el pipeline funcional es 3× más conciso que Jakarta Mail, y el adapter de desarrollo (correos en memoria, sin enviar) es una maravilla.
Pero hay algo que un ecosistema con décadas de madurez te da: que alguien ya pensó en las esquinas del sistema y las dejó resueltas para que tú no tengas que convertirte en experto en TLS/SSL para enviar un simple correo de registro.
La madurez empresarial de Java no es solo boilerplate. Es confiabilidad.
Elixir me encanta, pero este round se lo lleva Java. Y está genial admitirlo. ⚖️
Comparativa real de implementación de envío de correos SMTP con Gmail en Spring Boot (Java) vs Phoenix/Swoosh (Elixir), basada en el código fuente de Te Llevo App.
Pipeline Funcional: Estilo claro e intuitivo con operador pipe (|>). Componible y fácil de leer.
Adapter de Desarrollo Novedoso: Swoosh permite almacenar correos en memoria y visualizarlos en un buzón de desarrollo en /mailbox de manera nativa.
Test Adapter Integrado: Verificar si un correo se envió y validar su contenido se hace con aserciones nativas sencillas sin necesidad de mocks complejos.
Ausencia de CA Store: Erlang/OTP no hereda el almacén de certificados del SO fácilmente. Requiere apuntar manualmente a rutas como /etc/ssl/certs/ca-certificates.crt en Linux y puede dar problemas estrictos como max_path_length_reached.
Dependencias frágiles: Requiere obligatoriamente gen_smtp por debajo de Swoosh. Si la configuración de dependencias es incorrecta, los errores en cascada pueden ser confusos.