diff --git a/bus/src/main/java/de/srsoftware/umbrella/messagebus/MessageBus.java b/bus/src/main/java/de/srsoftware/umbrella/messagebus/MessageBus.java index f5919e88..6b6964a7 100644 --- a/bus/src/main/java/de/srsoftware/umbrella/messagebus/MessageBus.java +++ b/bus/src/main/java/de/srsoftware/umbrella/messagebus/MessageBus.java @@ -4,7 +4,6 @@ package de.srsoftware.umbrella.messagebus; import de.srsoftware.umbrella.messagebus.events.Event; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; public class MessageBus { diff --git a/messages/src/main/java/de/srsoftware/umbrella/message/Constants.java b/messages/src/main/java/de/srsoftware/umbrella/message/Constants.java index bd407701..23cfa2db 100644 --- a/messages/src/main/java/de/srsoftware/umbrella/message/Constants.java +++ b/messages/src/main/java/de/srsoftware/umbrella/message/Constants.java @@ -5,6 +5,7 @@ public class Constants { public static final String AUTH = "mail.smtp.auth"; public static final String CONFIG_DB = "umbrella.modules.message.database"; + public static final String CONFIG_SMTP_FROM = "umbrella.modules.message.smtp.from"; public static final String CONFIG_SMTP_HOST = "umbrella.modules.message.smtp.host"; public static final String CONFIG_SMTP_PASS = "umbrella.modules.message.smtp.pass"; public static final String CONFIG_SMTP_PORT = "umbrella.modules.message.smtp.port"; diff --git a/messages/src/main/java/de/srsoftware/umbrella/message/MessageSystem.java b/messages/src/main/java/de/srsoftware/umbrella/message/MessageSystem.java index aed00077..e3685999 100644 --- a/messages/src/main/java/de/srsoftware/umbrella/message/MessageSystem.java +++ b/messages/src/main/java/de/srsoftware/umbrella/message/MessageSystem.java @@ -93,10 +93,10 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener debugAddress = config.get(DEBUG_ADDREESS).map(Object::toString).orElse(null); port = config.get(CONFIG_SMTP_PORT,587); - host = config.get(CONFIG_SMTP_HOST).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.host not configured!")); - user = config.get(CONFIG_SMTP_USER).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.user not configured!")); - pass = config.get(CONFIG_SMTP_PASS).map(Object::toString).orElseThrow(() -> new RuntimeException("umbrella.modules.message.smtp.pass not configured!")); - from = user; + host = config.get(CONFIG_SMTP_HOST).map(Object::toString).orElseThrow(() -> missingConfig(CONFIG_SMTP_HOST)); + user = config.get(CONFIG_SMTP_USER).map(Object::toString).orElseThrow(() -> missingConfig(CONFIG_SMTP_USER)); + pass = config.get(CONFIG_SMTP_PASS).map(Object::toString).orElseThrow(() -> missingConfig(CONFIG_SMTP_PASS)); + from = config.get(CONFIG_SMTP_FROM).map(Object::toString).orElseThrow(() -> missingConfig(CONFIG_SMTP_FROM)); ModuleRegistry.add(this); new SubmissionTask(8).schedule(); new SubmissionTask(10).schedule(); @@ -212,6 +212,7 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener LOG.log(INFO,"Running {0}…",scheduledHour == null ? "instantly" : "scheduled at "+scheduledHour); var dueRecipients = queue.getReceivers().map(this::toUmbrellaUser).filter(uu -> sendAt(uu,scheduledHour)).toList(); + var fallbackSender = new User("Umbrella",new EmailAddress(from),null); var date = new Date(); @@ -220,7 +221,7 @@ public class MessageSystem extends BaseHandler implements PostBox, EventListener LOG.log(DEBUG,"Debug address is set to {0}, ignoring mail to {1}",debugAddress,receiver); continue; } - var combined = new CombinedMessage(t("Collected messages"),receiver); + var combined = new CombinedMessage(t("Collected messages"),receiver, fallbackSender); try { var envelopes = queue.getEnvelopesFor(receiver); diff --git a/messages/src/main/java/de/srsoftware/umbrella/message/model/CombinedMessage.java b/messages/src/main/java/de/srsoftware/umbrella/message/model/CombinedMessage.java index 7a17e043..60126e85 100644 --- a/messages/src/main/java/de/srsoftware/umbrella/message/model/CombinedMessage.java +++ b/messages/src/main/java/de/srsoftware/umbrella/message/model/CombinedMessage.java @@ -3,7 +3,6 @@ package de.srsoftware.umbrella.message.model; import static de.srsoftware.umbrella.core.ModuleRegistry.translator; import static de.srsoftware.umbrella.core.Util.dateTimeOf; -import static de.srsoftware.umbrella.core.model.Translatable.t; import static java.lang.System.Logger.Level.DEBUG; import static java.lang.System.Logger.Level.TRACE; import static java.text.MessageFormat.format; @@ -18,17 +17,19 @@ public class CombinedMessage { private final StringBuilder combinedBody = new StringBuilder(); private final User receiver; private final String lang; + private final User fallbackSender; private String combinedSubject = null; private final List> mergedMessages = new ArrayList<>(); private final Translatable subjectForCombinedMessage; - private UmbrellaUser sender = null; + private User sender = null; public static final String SEPARATOR = "\n\n━━━━━━━━━━━━━━━━━━━━━\n\n"; - public CombinedMessage(Translatable subjectForCombinedMessage, User receiver){ + public CombinedMessage(Translatable subjectForCombinedMessage, User receiver, User fallbackSender){ LOG.log(DEBUG,"Creating combined message for {0}…",receiver); this.subjectForCombinedMessage = subjectForCombinedMessage; this.receiver = receiver; this.lang = receiver.language(); + this.fallbackSender = fallbackSender; } public void addNote() { @@ -57,10 +58,11 @@ public class CombinedMessage { combinedSubject = subject; break; case 1: - combinedBody.insert(0,format("# {0} @ {1}\n→ {2}:\n\n",sender, dateTimeOf(message.utcTime()),subject)); // insert sender and subject of first message right before the body of the first message + combinedBody.insert(0,format("# {0} @ {1}\n→ {2}:\n\n",sender, dateTimeOf(mergedMessages.getFirst().utcTime()),subject)); // insert sender and subject of first message right before the body of the first message combinedSubject = subjectForCombinedMessage.translate(lang); // no break here, we need to append the subject and content default: + if (!sender.equals(message.sender())) sender = fallbackSender; combinedBody.append(SEPARATOR).append("# ").append(message.sender()).append(" @ ").append(dateTimeOf(message.utcTime())).append("\n→ ").append(subject).append(":\n\n"); combinedBody.append(body); } @@ -76,7 +78,7 @@ public class CombinedMessage { return receiver; } - public UmbrellaUser sender() { + public User sender() { return sender; } diff --git a/user/src/main/java/de/srsoftware/umbrella/user/api/UserDb.java b/user/src/main/java/de/srsoftware/umbrella/user/api/UserDb.java index 284d80a4..b7dada5a 100644 --- a/user/src/main/java/de/srsoftware/umbrella/user/api/UserDb.java +++ b/user/src/main/java/de/srsoftware/umbrella/user/api/UserDb.java @@ -10,7 +10,6 @@ import de.srsoftware.umbrella.user.model.DbUser; import de.srsoftware.umbrella.user.model.Password; import java.util.Collection; import java.util.Map; -import java.util.Optional; public interface UserDb {