EmailServerConnection.java 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package cz.senslog.analyzer.broker.email;
  2. import jakarta.mail.*;
  3. import jakarta.mail.internet.InternetAddress;
  4. import jakarta.mail.internet.MimeBodyPart;
  5. import jakarta.mail.internet.MimeMessage;
  6. import jakarta.mail.internet.MimeMultipart;
  7. import java.util.Map;
  8. import java.util.Properties;
  9. import static jakarta.mail.Message.RecipientType.TO;
  10. public class EmailServerConnection {
  11. private final EmailServerConfig config;
  12. public EmailServerConnection(EmailServerConfig config) {
  13. this.config = config;
  14. }
  15. private Session openSession(EmailServerConfig config) {
  16. Properties props = new Properties();
  17. props.put("mail.smtp.host", config.getSmtpHost());
  18. props.put("mail.smtp.port", config.getSmtpPort());
  19. props.put("mail.smtp.auth", "true");
  20. props.put("mail.smtp.starttls.enable", "true");
  21. props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
  22. Authenticator auth = new Authenticator() {
  23. protected PasswordAuthentication getPasswordAuthentication() {
  24. return new PasswordAuthentication(config.getUsername(), config.getPassword());
  25. }
  26. };
  27. return Session.getInstance(props, auth);
  28. }
  29. public void send(String content, Map<String, String> subjectVariables, EmailMessageConfig messageConfig) throws MessagingException {
  30. Session session = openSession(config);
  31. Message message = new MimeMessage(session);
  32. message.setFrom(new InternetAddress(messageConfig.getSenderEmail()));
  33. String recipients = String.join(",",messageConfig.getRecipientEmails());
  34. message.setRecipients(TO, InternetAddress.parse(recipients));
  35. String subjectPattern = messageConfig.getSubject();
  36. for (Map.Entry<String, String> varEntry : subjectVariables.entrySet()) {
  37. if (subjectPattern.contains(varEntry.getKey())) {
  38. subjectPattern = subjectPattern.replace(varEntry.getKey(), varEntry.getValue());
  39. }
  40. }
  41. message.setSubject(subjectPattern);
  42. MimeBodyPart mimeBodyPart = new MimeBodyPart();
  43. mimeBodyPart.setContent(content, "text/html;charset=UTF-8");
  44. Multipart multipart = new MimeMultipart();
  45. multipart.addBodyPart(mimeBodyPart);
  46. message.setContent(multipart);
  47. Transport.send(message);
  48. }
  49. }