package cz.senslog.analyzer.broker.email; import jakarta.mail.*; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeBodyPart; import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeMultipart; import java.util.Map; import java.util.Properties; import static jakarta.mail.Message.RecipientType.TO; public class EmailServerConnection { private final EmailServerConfig config; public EmailServerConnection(EmailServerConfig config) { this.config = config; } private Session openSession(EmailServerConfig config) { Properties props = new Properties(); props.put("mail.smtp.host", config.getSmtpHost()); props.put("mail.smtp.port", config.getSmtpPort()); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); Authenticator auth = new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(config.getUsername(), config.getPassword()); } }; return Session.getInstance(props, auth); } public void send(String content, Map subjectVariables, EmailMessageConfig messageConfig) throws MessagingException { Session session = openSession(config); Message message = new MimeMessage(session); message.setFrom(new InternetAddress(messageConfig.getSenderEmail())); String recipients = String.join(",",messageConfig.getRecipientEmails()); message.setRecipients(TO, InternetAddress.parse(recipients)); String subjectPattern = messageConfig.getSubject(); for (Map.Entry varEntry : subjectVariables.entrySet()) { if (subjectPattern.contains(varEntry.getKey())) { subjectPattern = subjectPattern.replace(varEntry.getKey(), varEntry.getValue()); } } message.setSubject(subjectPattern); MimeBodyPart mimeBodyPart = new MimeBodyPart(); mimeBodyPart.setContent(content, "text/html;charset=UTF-8"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(mimeBodyPart); message.setContent(multipart); Transport.send(message); } }