Cuando se desarrollan aplicaciones empresariales en JavaEE, un requerimiento muy común es el envío de correos electrónicos (e-mail) vía SMTP.

SpringFramework cuenta con el paquete org.springframework.mail el cual brinda una integración muy simple con JavaMail el api estándar de JavaSE para envío de correo electrónico. Spring proporciona dos modelos de envío de mail, el más simple con el uso de la interfaz org.springframework.mail.MailSender y su implementación por defecto org.springframework.mail.SimpleMailMessage para el envío de mail de texto plano.

El segundo, a través de la interfaz org.springframework.mail.javamail.JavaMailSender y su implementación por defecto org.springframework.mail.javamail.JavaMailSenderImpl
que permite el envío de mail tipo MIME con archivos adjuntos.

A continuación explico cómo configurar y desarrollar el código Java necesario para enviar correos vía SMTP usando los servidores de Gmail.

Para este ejemplo se usa el APIorg.springframework.mail.SimpleMailMessage. Esta información se pueden encontrar también en la documentación de SpringFramework disponible en: http://static.springsource.org/spring/docs/3.1.0.M2/spring-framework-reference/html/mail.html para el envío de un mail es necesario agregar al proyecto las librerías JavaMail mail.jar y JAF activation.jar.

En el ejemplo uso Annotations disponible desde la versión 3.0 de SpringFramework primero se debe crear el archivo de configuración applicationContext.xml.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"      
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:context="http://www.springframework.org/schema/context"      
     xsi:schemaLocation="http://www.springframework.org/schema/beans         
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         
     http://www.springframework.org/schema/context         
     http://www.springframework.org/schema/context/spring-context-3.0.xsd">    

    <context:annotation-config/>      
 
    <!-- Si su paquete no inicia por 'com' debe cambiar el valor de base-package por el inicio de su paquete -->   
    <context:component-scan base-package="com" scoped-proxy="interfaces" />      

    <!-- configuracion para enviar correos por gmail usando el puerto 465 --> 
  <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">         
                      <property name="host" value="smtp.gmail.com"/>                   
                      <property name="username" value="envia@gmail.com"/>         
                      <property name="password" value="supassword"/>         
                      <property name="port" value="465"/>         
                      <property name="javaMailProperties">                 
                      <value>                        
                         mail.debug=true
                         mail.smtp.auth=true
                         mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

                         mail.smtp.socketFactory.fallback=false
                 </value>
         </property>
      </bean> <!-- Este template se carga por defecto pero en el codigo se pueden cambiar los valores -->
    <bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
    <property name="from" value="envia@gmail.com"/>
      <property name="to" value="recibe@gmail.com"/>
  <property name="subject" value="Prueba de correo electrónico enviado con spring"/>
   </bean>   </beans> <!--     Ejemplo desarrollado por Diego Armando Gómez Mosquera 
dgomez@vortexbird.com-->

Después de tener configurado el archivo, se debe desarrollar una clase Java para el envío de correo. Para este fin yo creo una interfaz llamada IEnviarMensajeSimpleMailMessage y su implementación EnviarMensajeSimpleMailMessageImplementacion. Código de la interfaz IEnviarMensajeSimpleMailMessage.

package com.vortexbird.spring.demo.mail;
public interface IEnviarMensajeSimpleMailMessage {
  	public void enviarMensaje()throws Exception;
  }

Código de la clase EnviarMensajeSimpleMailMessageImplementacion que implementa la interfaz IEnviarMensajeSimpleMailMessage.

package com.vortexbird.spring.demo.mail;  
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Scope; 
import org.springframework.mail.MailException; 
import org.springframework.mail.MailSender; 
import org.springframework.mail.SimpleMailMessage; 
import org.springframework.stereotype.Service;  

 @Scope("singleton")
 @Service("EnviarMensajeSimpleMailMessageImplementacion")
 public class EnviarMensajeSimpleMailMessageImplementacion implements
 									IEnviarMensajeSimpleMailMessage {
  	@Autowired
 	private MailSender mailSender; 	@Autowired
     private SimpleMailMessage templateMessage;
  	public void enviarMensaje() throws Exception {
  		SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage);
          msg.setText("Este es el texto del mensaje");
          try{
             this.mailSender.send(msg);
         }
         catch(MailException ex) {
             System.err.println(ex.getMessage());
         }
 	}
 }

Con esta implementación ya se puede enviar un mail usando los servicios de Gmail.

A continuación se encuentra una clase llamada TestEnviarMensajeSimpleMailMessage con la cual se puede probar el correcto funcionamiento de la implementación.

package com.vortexbird.spring.demo.test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.vortexbird.spring.demo.mail.IEnviarMensajeSimpleMailMessage;

public class TestEnviarMensajeSimpleMailMessage {
public static void main(String[] args) {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("/applicationContext.xml");
IEnviarMensajeSimpleMailMessage enviarMensajeSimpleMailMessage=(IEnviarMensajeSimpleMailMessage)beanFactory.getBean(IEnviarMensajeSimpleMailMessage.class);

         try {

          enviarMensajeSimpleMailMessage.enviarMensaje();
          } catch (Exception e) {
          e.printStackTrace();
          }
     }
}

Después de ejecutar la clase TestEnviarMensajeSimpleMailMessage puede revisar su correo y debe tener un mensaje con el texto «Este es el texto del mensaje».

Como se puede observar es muy simple el envío de mail con el API que proporciona SpringFramework3.0 y el uso de anotaciones. El código se encuentra disponible en: enviarCorreoSpringFramework

No hay comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *