SmtpEmailSender.java

package com.ecommerce.notification.infrastructure.email;

import com.ecommerce.notification.application.port.EmailSender;
import com.ecommerce.notification.infrastructure.config.NotificationDeliveryProperties;
import jakarta.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;

@Component
public class SmtpEmailSender implements EmailSender {

    private final JavaMailSender mailSender;
    private final NotificationDeliveryProperties properties;

    public SmtpEmailSender(
            JavaMailSender mailSender,
            NotificationDeliveryProperties properties) {
        this.mailSender = mailSender;
        this.properties = properties;
    }

    @Override
    public void send(EmailMessage message) {
        mailSender.send((MimeMessage mimeMessage) -> {
            MimeMessageHelper helper = new MimeMessageHelper(
                    mimeMessage,
                    false,
                    StandardCharsets.UTF_8.name());
            helper.setFrom(properties.from());
            helper.setTo(message.destination());
            helper.setSubject(message.subject());
            helper.setText(message.content(), false);
            mimeMessage.setHeader("Message-ID", message.providerMessageId());
            mimeMessage.setHeader("X-PlainJournal-Delivery-Id", message.providerMessageId());
        });
    }
}