Envio de E-mails com Spring Boot em Java

Para configurar o envio de e-mails em uma aplicação Spring Boot, inclua as dependências necessárias no arquivo pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Crie uma classe de serviço para gerenciar o envio de e-mails. O exemplo abaixo ilustra métodos para diferentes tipos de e-mail:

package com.example.email.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import freemarker.template.Configuration;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.List;
import java.util.Map;

@Service
public class EmailDispatcher {
    private static final Logger logger = LoggerFactory.getLogger(EmailDispatcher.class);

    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String fromAddress;

    @Autowired
    private TemplateEngine thymeleafEngine;

    @Autowired
    private Configuration freemarkerConfig;

    public void sendSimpleEmail(String toAddress, String subject, String body) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(fromAddress);
        message.setTo(toAddress);
        message.setSubject(subject);
        message.setText(body);
        try {
            mailSender.send(message);
            logger.info("Email simples enviado para: " + toAddress);
        } catch (Exception e) {
            logger.error("Erro ao enviar email simples: ", e);
        }
    }

    public void sendHtmlEmail(String toAddress, String subject, String htmlContent) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            helper.setFrom(fromAddress);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            helper.setText(htmlContent, true);
            mailSender.send(mimeMessage);
            logger.info("Email HTML enviado para: " + toAddress);
        } catch (Exception e) {
            logger.error("Erro ao enviar email HTML: ", e);
        }
    }

    public void sendFreemarkerTemplateEmail(String toAddress, String subject, Map<String, Object> templateVars) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            helper.setFrom(fromAddress);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            freemarkerConfig.setDefaultEncoding("UTF-8");
            freemarkerConfig.setClassForTemplateLoading(this.getClass(), "/templates/");
            freemarker.template.Template template = freemarkerConfig.getTemplate("email-template.ftl");
            String html = freemarker.template.utility.StringUtil.toString(template.process(templateVars));
            helper.setText(html, true);
            mailSender.send(mimeMessage);
            logger.info("Email com template Freemarker enviado para: " + toAddress);
        } catch (Exception e) {
            logger.error("Erro ao enviar email com template Freemarker: ", e);
        }
    }

    public void sendThymeleafTemplateEmail(String toAddress, String subject, Map<String, Object> model) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        Context context = new Context();
        if (model != null) {
            for (Map.Entry<String, Object> entry : model.entrySet()) {
                context.setVariable(entry.getKey(), entry.getValue());
            }
        }
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            helper.setFrom(fromAddress);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            String htmlContent = thymeleafEngine.process("thymeleaf-template", context);
            helper.setText(htmlContent, true);
            mailSender.send(mimeMessage);
            logger.info("Email com template Thymeleaf enviado para: " + toAddress);
        } catch (Exception e) {
            logger.error("Erro ao enviar email com template Thymeleaf: ", e);
        }
    }

    public void sendEmailWithAttachments(String toAddress, String subject, String body, List<File> attachments) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
            helper.setFrom(fromAddress);
            helper.setTo(toAddress);
            helper.setSubject(subject);
            helper.setText(body, true);
            if (attachments != null) {
                for (File file : attachments) {
                    FileSystemResource resource = new FileSystemResource(file);
                    helper.addAttachment(file.getName(), resource);
                }
            }
            mailSender.send(message);
            logger.info("Email com anexos enviado para: " + toAddress);
        } catch (Exception e) {
            logger.error("Erro ao enviar email com anexos: ", e);
        }
    }
}

Configure as propriedades de e-mail, como servidor SMTP e credenciias, no arquivo de configruação da aplicação, por exemplo, application.properties.

Tags: Spring Boot java E-mail FreeMarker thymeleaf

Publicado em 7-16 02:59