Mi aplicación necesita enviar correos electrónicos ad hoc. Estoy usando getDefaultSession y getTransport de javamail para enviar el mensaje, y todo está funcionando como se esperaba.¿Es aceptable dejar abierta la sesión de javamail Transport?
Sin embargo, he notado que el envío puede llevar mucho tiempo, hasta siete segundos por envío. Si rompo los pasos hacia abajo, como esto:
Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage(msg, addresses)
transport.close();
... Puedo ver que es la llamada connect() que toma casi todo el tiempo, cada vez.
Todos los ejemplos que he encontrado hacen esto: obtener un transporte, conectar, enviar, desconectar. Pero, por supuesto, todos son ejemplos de una sola toma, o el envío de grandes lotes de correos electrónicos en una sola llamada.
estaba pensando tan sólo pudiera dejar la conexión abierta, así:
Transport transport = session.getTransport("smtp");
if (!transport.isConnected())
transport.connect();
transport.sendMessage(msg, addresses)
(Hay una variación sobre el mismo, aquí: java mail keeping Transport object connected).
Tendré que cerrarlo eventualmente, en un gancho de apagado de algún tipo. Y podría tener que tener un respaldo (si la conexión se ha perdido pero el transporte no se da cuenta). ¿Pero hay alguna razón para no dejarlo abierto así durante la vida útil de la aplicación?
Gracias, Alastair
Hola Tomas, gracias por eso, exactamente lo que esperaba. De hecho, estoy planeando usarlo en una instancia singleton 'EmailSender', así que esto debería estar bien. – Alastair
Este enfoque podría provocar graves problemas de rendimiento en el entorno de subprocesos múltiples como se describe en mi respuesta – Yura