Create Mail Session in Tomcat (JNDI)

Crear una Sesión de Correo en Tomcat (JNDI)

El envío de correo electrónico es un mecanismo común en las aplicaciones web, en Java se hace a través del API  con las clases del paquete javax.mail, sin embargo es un proceso que requiere mucha atención por el nivel de carga que puede tener el servidor, porque impacta directamente en el rendimiento.

La forma adecuada de utilizarlo es através de un recurso de JNDI el cual crea una sesión unica y compartida para el envío de correo de un sistema, es decir, cuando se despliega un proyeccto web se genera una sola sesión la cual estará activa y disponible como un recurso para el sistema.

Así cada vez que hay que enviar un correo se toman los datos de la sesión y se ahorran recursos.

Procedimiento

Agrega las siguientes librerias a la carpeta de lib del Tomcat:

  • activation.jar
  • mail.jar



Nota: al cargar el empaquetado de tu proyecto web en el servidor, NO DEBE INCLUIR las mismas librerias ya que puede causar conflictos y errores, si estas trabajando con Maven las dependencias deben ser marcadas como provided.

Ahora solo hay que configurar un recurso en nuestro proyecto web, editas el archivo context.xml que está dentro de la carpeta META-INF (crealos si no existen) y agregas las siguientes lineas:

    <!-- Java Mail session -->
    <Resource name="jndi/MailSession"
              auth="Container"
              type="javax.mail.Session"
              username="no-reply@mail-provider.com"
              password="MyPASSWORD"
              mail.debug="false"
              mail.user="no-reply@mail-provider.com"
              mail.password="MyPASSWORD"
              mail.transport.protocol="smtp"
              mail.smtp.host="no-reply@mail-provider.com"
              mail.smtp.auth="true"
              mail.smtp.port="26"
              mail.smtp.starttls.enable="true"/>

Nota: Los datos dependen de tu provedor de correo como el host, el puerto, el usuario y el password.

Si trabajas con spring hasta aquí ya tienes todo lo necesario para utilizar el recurso, pero si lo vas a utilizar con otros mecanismos tienes que agregar una referencia en el web.xml:

    <resource-ref>
        <description>Email Session</description>
        <res-ref-name>jndi/MailSession</res-ref-name>
        <res-type>javax.mail.Session</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

Con esto el recurso ya esta disponible desde el código java por JNDI con el nombre “jndi/MailSession“.

  Context initContext = new InitialContext();
  Context context = (Context) initContext.lookup("java:comp/env");
  Session mailSession = (Session) context.lookup("jndi/MailSession");
  //Your code to send the email goes here

Enlaces

Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s