From 1f9456d2aefec51a7006a6d3997d719aed9272f2 Mon Sep 17 00:00:00 2001 From: Florian Ehrenstorfer Date: Mon, 24 Feb 2025 17:18:13 +0100 Subject: [PATCH] add mail template #248 --- .../hephaestus/notification/MailBuilder.java | 23 +++++++++++++++++-- .../hephaestus/notification/MailConfig.java | 11 ++------- .../hephaestus/notification/MailService.java | 13 ++++++++++- .../bad-practices-detected.html | 4 +++- 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailBuilder.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailBuilder.java index 9cf99025..e8bf711c 100644 --- a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailBuilder.java +++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailBuilder.java @@ -74,12 +74,30 @@ public MailBuilder addPrimaryRecipient(User user) { return this; } + public MailBuilder fillPlaceholder(String placeholder, Object value) { + this.variables.put(placeholder, value); + + return this; + } + + public MailBuilder fillUserPlaceholders(User user, String placeholder) { + fillPlaceholder(placeholder, UserInfoDTO.fromUser(user)); + + return this; + } + + public MailBuilder fillBadPracticePlaceholders(String badPractice, String placeholder) { + fillPlaceholder(placeholder, badPractice); + + return this; + } + public void send(JavaMailSender mailSender) { List toRecipients = new ArrayList<>(); for (User recipient : primaryRecipients) { - if (!recipient.isNotificationsEnabled()) { + if (!recipient.isNotificationsEnabled() || recipient.getEmail() == null || !recipient.getEmail().contains("@")) { continue; } toRecipients.add(recipient); @@ -89,7 +107,7 @@ public void send(JavaMailSender mailSender) { try { MimeMessage message = mailSender.createMimeMessage(); - message.setFrom("ThesisManagement <" + config.getSender().getAddress() + ">"); + message.setFrom("Hephaestus <" + config.getSender().getAddress() + ">"); message.setSender(config.getSender()); message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient.getEmail())); @@ -109,6 +127,7 @@ public void send(JavaMailSender mailSender) { message.setContent(messageContent); if (config.isEnabled()) { + log.info("Sending Mail\n{}", messageBody.getContent()); mailSender.send(message); } else { log.info("Sending Mail (postfix disabled)\n{}", messageBody.getContent()); diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailConfig.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailConfig.java index 2ef03c85..18934af6 100644 --- a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailConfig.java +++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailConfig.java @@ -15,9 +15,6 @@ public class MailConfig { private final Boolean enabled; - @Getter - private final String clientHost; - @Getter private final InternetAddress sender; @@ -32,13 +29,11 @@ public MailConfig( @Value("${hephaestus.mail.sender}") InternetAddress sender, @Value("${hephaestus.mail.enabled}") boolean enabled, @Value("${hephaestus.mail.signature}") String mailSignature, - @Value("${hephaestus.client.host}") String clientHost, TemplateEngine templateEngine ) { this.enabled = enabled; this.sender = sender; this.signature = mailSignature; - this.clientHost = clientHost; this.templateEngine = templateEngine; } @@ -47,14 +42,12 @@ public boolean isEnabled() { } public record MailConfigDto( - String signature, - String clientHost + String signature ) {} public MailConfigDto getConfigDto() { return new MailConfigDto( - Objects.requireNonNullElse(signature, ""), - Objects.requireNonNullElse(getClientHost(), "") + Objects.requireNonNullElse(signature, "") ); } } diff --git a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailService.java b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailService.java index a3ac0df1..243a8d8b 100644 --- a/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailService.java +++ b/server/application-server/src/main/java/de/tum/in/www1/hephaestus/notification/MailService.java @@ -1,6 +1,9 @@ package de.tum.in.www1.hephaestus.notification; import de.tum.in.www1.hephaestus.gitprovider.user.User; +import de.tum.in.www1.hephaestus.gitprovider.user.UserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @@ -10,6 +13,8 @@ @Service public class MailService { + private static final Logger logger = LoggerFactory.getLogger(MailService.class); + private final JavaMailSender javaMailSender; private final MailConfig mailConfig; @@ -20,10 +25,16 @@ public MailService(JavaMailSender javaMailSender, MailConfig mailConfig) { this.mailConfig = mailConfig; } - public void sendBadPracticesDetectedEmail(User user, List badPractices) { + public void sendBadPracticesDetectedEmail(User user, String badPractice) { + logger.info("Sending bad practice detected email to user: " + user.getLogin()); + if (!user.getLogin().equals("iam-flo")) + return; + MailBuilder mailBuilder = new MailBuilder(mailConfig, "Bad Practices Detected", "bad-practices-detected"); mailBuilder .addPrimaryRecipient(user) + .fillUserPlaceholders(user, "user") + .fillBadPracticePlaceholders(badPractice, "badPractice") .send(javaMailSender); } } diff --git a/server/application-server/src/main/resources/mail-templates/bad-practices-detected.html b/server/application-server/src/main/resources/mail-templates/bad-practices-detected.html index d8335126..783fa061 100644 --- a/server/application-server/src/main/resources/mail-templates/bad-practices-detected.html +++ b/server/application-server/src/main/resources/mail-templates/bad-practices-detected.html @@ -1,3 +1,5 @@

- Bad practice detected. + Hi [[${user.name}]], +
+ We have detected the bad practice [[${badPractice}]] in your pull request. Please review the issue on Hephaestus.

\ No newline at end of file