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.