src/main/java/com/forum/service/MailService.java
package com.forum.service;
import com.forum.exceptions.SpringForumException;
import com.forum.model.NotificationEmail;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
@Slf4j
class MailService {
private final JavaMailSender mailSender;
private final MailContentBuilder mailContentBuilder;
@Async
void sendMail(NotificationEmail notificationEmail) {
MimeMessagePreparator messagePreparator = mimeMessage -> {
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
messageHelper.setFrom("forum_mail@email.com");
messageHelper.setTo(notificationEmail.getRecipient());
messageHelper.setSubject(notificationEmail.getSubject());
messageHelper.setText(mailContentBuilder.build(notificationEmail.getBody()));
};
try {
mailSender.send(messagePreparator);
log.info("Activation email sent!!");
} catch (MailException e) {
log.error("Exception occurred when sending mail", e);
throw new SpringForumException("Exception occurred when sending mail to " + notificationEmail.getRecipient(), e);
}
}
}