sábado, 5 de noviembre de 2016

Spring Boot Mail: Configuración básica y para AWS SES

Seguimos con otro post sobre Spring Boot, en este caso relacionado con el envío de correos electrónicos. Y al final lo enlazaremos para poder usarlo con Amazon Simple Email Service.

Para empezar, lo básico. Añadir Spring boot  nuestro proyecto via Maven. Para ello indicamos que nuestro proyecto hereda de 'spring-boot-starter-parent' y que vamos a utilizar 'spring-boot-starter-mail'.

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>1.4.0.RELEASE</version>
   <relativePath />
</parent>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

Tras esto, viene la configuración básica para utilizar un servidor SMTP a través de Spring Boot. Por lo que como es habitual, rellenamos las propiedades apropiadas en el fichero application.properties.

spring.mail.host={TU_HOST}
spring.mail.port={HOST_PORT/25}
spring.mail.protocol=smtp

Tras esto, ya solo nos quedará inyectar en alguna de nuestras clases 'JavaMailSender'. Y utilizar a este mismo para enviar el correo. Así de facil y rápido. 


@Autowired
private JavaMailSender javaMailService;
......
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setTo( para );
mailMessage.setFrom( de);
mailMessage.setSubject( tituloCorreo);
mailMessage.setText( contenidoCorreo);
javaMailService.send( mailMessage );

Ahora vamos a ver como debemos configurarlo y usarlo si queremos enviar a través de AWS SES y además no enviar texto plano, sino HTML. El primer paso para ello será modificar la configuración de la siguiente forma:


spring.mail.host={TU_HOST}
spring.mail.password={TU_CLAVE_SES}
spring.mail.port=465
spring.mail.protocol=smtps
spring.mail.username={TU_USUARIO_SES}
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.ssl.enable = true
spring.mail.properties.mail.transport.protocol=smtps

Y a la hora de enviar el mail debemos dejar de usar 'SimpleMailMessage' y usar 'MimeMessage' y su Helper. Eso si, el 'body' del mensaje debe de tener sus etiquetas HTML. 


MimeMessage mailMessage = javaMailService.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper( mailMessage, false, "utf-8" );
helper.setTo( para );
helper.setFrom( de );
helper.setSubject( tituloCorreo );
mailMessage.setContent( contenidoCorreo , "text/html" );
javaMailService.send( mailMessage );

No hay comentarios:

Publicar un comentario