Envio de E-mails com Anexos e Formato HTML usando Spring Boot Starter Mail

Esta técnica aborda o envio de e-mails com suporte a conteúdo HTML e anexos utilizando a biblioteca spring-boot-starter-mail no Spring Boot. A abordagem é recomendada devido à transição para Jakarta EE no Spring Boot 3, que substitui javax.mail por jakarta.mail, facilitando a integração nativa.

Para configurar, adicione a seguinte dependência Maven ao projeto:

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

A seguir, um exemplo ilustrativo de uma classe que envia e-mails simples, HTML e com anexos, com nomes de classes e métodos alterados para mostrar uma estrutura alternativa.

import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;

import java.io.File;
import java.util.List;
import java.util.Properties;

public class EmailDispatcherDemo {
    public static void main(String[] args) {
        String destinatarios = "user1@example.com,user2@example.com";
        String assunto = "Demonstração de Envio";
        String corpo = "<h1>Conteúdo em HTML</h1><p>Este é um e-mail de teste.</p>";
        boolean usarHtml = true;

        File anexo1 = new File("/caminho/para/documento.pdf");
        File anexo2 = new File("/caminho/para/imagem.png");
        List<File> anexos = List.of(anexo1, anexo2);

        boolean resultado = enviarEmail(destinatarios, assunto, corpo, usarHtml, anexos);
        System.out.println("Status do envio: " + resultado);
    }

    public static boolean enviarEmail(String para, String assunto, String conteudo, boolean ehHtml, List<File> arquivos) {
        JavaMailSenderImpl remetente = configurarRemetente();
        try {
            MimeMessage mensagem = remetente.createMimeMessage();
            MimeMessageHelper auxiliar = new MimeMessageHelper(mensagem, true);
            auxiliar.setFrom("noreply@meudominio.com");
            auxiliar.setTo(para.split(","));
            auxiliar.setSubject(assunto);
            auxiliar.setText(conteudo, ehHtml);

            if (arquivos != null && !arquivos.isEmpty()) {
                for (File arquivo : arquivos) {
                    auxiliar.addAttachment(arquivo.getName(), arquivo);
                }
            }

            remetente.send(mensagem);
            return true;
        } catch (MessagingException excecao) {
            excecao.printStackTrace();
            return false;
        }
    }

    private static JavaMailSenderImpl configurarRemetente() {
        JavaMailSenderImpl remetente = new JavaMailSenderImpl();
        remetente.setHost("smtp.servidor.com");
        remetente.setUsername("autenticacao@servidor.com");
        remetente.setPassword("senha_segura");
        remetente.setPort(465);
        remetente.setDefaultEncoding("UTF-8");
        remetente.setProtocol("smtp");

        Properties propriedades = new Properties();
        propriedades.put("mail.smtp.auth", "true");
        propriedades.put("mail.smtp.connectiontimeout", "30000");
        propriedades.put("mail.smtp.ssl.enable", "true");
        remetente.setJavaMailProperties(propriedades);
        return remetente;
    }
}

Para envio de e-mails de texto puro sem elementos avançados, utilize a classe SimpleMailMessage:

import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;

public class TextoPuroEmailDemo {
    public static void main(String[] args) {
        JavaMailSenderImpl remetente = new JavaMailSenderImpl();
        remetente.setHost("smtp.servidor.com");
        remetente.setUsername("autenticacao@servidor.com");
        remetente.setPassword("senha_segura");
        remetente.setPort(587);
        remetente.setDefaultEncoding("UTF-8");

        Properties propriedades = new Properties();
        propriedades.put("mail.smtp.auth", "true");
        remetente.setJavaMailProperties(propriedades);

        SimpleMailMessage mensagemSimples = new SimpleMailMessage();
        mensagemSimples.setFrom("contato@meudominio.com");
        mensagemSimples.setTo("destinatario@example.com");
        mensagemSimples.setSubject("Aviso Importante");
        mensagemSimples.setText("Esta mensagem confirma o recebimento do e-mail.");

        remetente.send(mensagemSimples);
    }
}

Tags: spring-boot java-mail email SMTP attachments

Publicado em 6-29 03:57