MessagingServiceImpl.java
package net.andresbustamante.yafoot.messaging.services.impl;
import jakarta.mail.Address;
import jakarta.mail.Message;
import jakarta.mail.MessagingException;
import jakarta.mail.Transport;
import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;
import net.andresbustamante.yafoot.commons.exceptions.ApplicationException;
import net.andresbustamante.yafoot.messaging.services.MessagingService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.io.UnsupportedEncodingException;
import java.util.Date;
@Service
public class MessagingServiceImpl implements MessagingService {
private final JavaMailSender mailSender;
@Value("${app.mail.sender.address}")
private String mailSenderAddress;
@Value("${app.mail.sender.name}")
private String mailSenderName;
private final Logger log = LoggerFactory.getLogger(MessagingServiceImpl.class);
public MessagingServiceImpl(final JavaMailSender mailSender) {
this.mailSender = mailSender;
}
@Override
@Async
public void sendEmail(final String destinationEmail, final String subject, final String content)
throws ApplicationException {
try {
MimeMessage message = mailSender.createMimeMessage();
Address toAddress = new InternetAddress(destinationEmail);
Address fromAddress = new InternetAddress(mailSenderAddress, mailSenderName);
message.setFrom(fromAddress);
message.setRecipient(Message.RecipientType.TO, toAddress);
message.setSubject(subject, "UTF-8");
message.setSentDate(new Date());
message.setContent(content, "text/plain; charset=UTF-8");
Transport.send(message);
log.info("Message sent to '{}' with the subject '{}'", destinationEmail, subject);
} catch (UnsupportedEncodingException | MessagingException e) {
throw new ApplicationException("An error occurred while sending an email", e);
}
}
}