From df39e6a57f11397dc2ec7a754a406ffd63a9a2b5 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 21 Jan 2026 22:48:18 +0100 Subject: [PATCH 1/2] implemented configurable fallback-sender for collected mails with several senders Signed-off-by: Stephan Richter --- .../srsoftware/umbrella/message/Constants.java | 1 + .../umbrella/message/MessageSystem.java | 16 +++++++++------- .../umbrella/message/model/CombinedMessage.java | 15 ++++++++------- 3 files changed, 18 insertions(+), 14 deletions(-) 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 d0018b58..450a5c37 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 d70e3865..0394c161 100644 --- a/messages/src/main/java/de/srsoftware/umbrella/message/MessageSystem.java +++ b/messages/src/main/java/de/srsoftware/umbrella/message/MessageSystem.java @@ -3,6 +3,7 @@ package de.srsoftware.umbrella.message; import static de.srsoftware.tools.PathHandler.CONTENT_TYPE; import static de.srsoftware.umbrella.core.ConnectionProvider.connect; +import static de.srsoftware.umbrella.core.ModuleRegistry.translator; import static de.srsoftware.umbrella.core.constants.Constants.UTF8; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.missingConfig; import static de.srsoftware.umbrella.message.Constants.*; @@ -12,6 +13,7 @@ import de.srsoftware.configuration.Configuration; import de.srsoftware.umbrella.core.ModuleRegistry; import de.srsoftware.umbrella.core.api.PostBox; import de.srsoftware.umbrella.core.exceptions.UmbrellaException; +import de.srsoftware.umbrella.core.model.EmailAddress; import de.srsoftware.umbrella.core.model.Envelope; import de.srsoftware.umbrella.core.model.UmbrellaUser; import de.srsoftware.umbrella.core.model.User; @@ -76,10 +78,10 @@ public class MessageSystem implements PostBox { db = new SqliteMessageDb(connect(dbFile)); 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(); @@ -116,9 +118,9 @@ public class MessageSystem implements PostBox { var date = new Date(); for (var receiver : dueRecipients){ - BiFunction,String> translateFunction = (text,fills) -> ModuleRegistry.translator().translate(receiver.language(),text,fills); - - var combined = new CombinedMessage("Collected messages",translateFunction); + BiFunction,String> translateFunction = (text,fills) -> translator().translate(receiver.language(),text,fills); + var fallbackSender = new User("Umbrella",new EmailAddress(from),null); + var combined = new CombinedMessage("Collected messages",translateFunction,fallbackSender); var envelopes = queue.stream().filter(env -> env.isFor(receiver)).toList(); for (var envelope : envelopes) combined.merge(envelope.message()); 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 309408ab..95f1ed47 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 @@ -5,9 +5,7 @@ import static java.lang.System.Logger.Level.DEBUG; import static java.lang.System.Logger.Level.TRACE; import static java.text.MessageFormat.format; -import de.srsoftware.umbrella.core.model.Attachment; -import de.srsoftware.umbrella.core.model.Message; -import de.srsoftware.umbrella.core.model.UmbrellaUser; +import de.srsoftware.umbrella.core.model.*; import java.util.*; import java.util.function.BiFunction; @@ -16,15 +14,17 @@ public class CombinedMessage { private final Set attachments = new HashSet<>(); private final StringBuilder combinedBody = new StringBuilder(); + private final User fallbackSender; private String combinedSubject = null; private final List mergedMessages = new ArrayList<>(); private final String subjectForCombinedMessage; private final BiFunction,String> translate; - private UmbrellaUser sender = null; + private User sender = null; - public CombinedMessage(String subjectForCombinedMessage, BiFunction,String> translateFunction){ + public CombinedMessage(String subjectForCombinedMessage, BiFunction,String> translateFunction, User fallbackSender){ LOG.log(DEBUG,"Creating combined message…"); - this.subjectForCombinedMessage = subjectForCombinedMessage; + this.subjectForCombinedMessage = translateFunction.apply(subjectForCombinedMessage,null); + this.fallbackSender = fallbackSender; translate = translateFunction; } @@ -39,6 +39,7 @@ public class CombinedMessage { combinedSubject = subject; break; case 1: + if (!sender.equals(message.sender())) sender = fallbackSender; combinedBody.insert(0,format("# {0}:\n# {1}:\n\n",sender,subject)); // insert sender and subject of first message right before the body of the first message combinedSubject = subjectForCombinedMessage; // no break here, we need to append the subject and content @@ -59,7 +60,7 @@ public class CombinedMessage { return combinedBody.toString(); } - public UmbrellaUser sender() { + public User sender() { return sender; } From c1beda16697fb2c39f57e9060c39b65a8a7646b2 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 21 Jan 2026 22:50:47 +0100 Subject: [PATCH 2/2] improved formatting of combined messages Signed-off-by: Stephan Richter --- .../srsoftware/umbrella/message/model/CombinedMessage.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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 95f1ed47..cb88e2ed 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 @@ -40,12 +40,11 @@ public class CombinedMessage { break; case 1: if (!sender.equals(message.sender())) sender = fallbackSender; - combinedBody.insert(0,format("# {0}:\n# {1}:\n\n",sender,subject)); // insert sender and subject of first message right before the body of the first message + combinedBody.insert(0,format("# {0} / {1}:\n\n",sender,subject)); // insert sender and subject of first message right before the body of the first message combinedSubject = subjectForCombinedMessage; // no break here, we need to append the subject and content default: - combinedBody.append("\n\n# ").append(message.sender()).append(":\n"); - combinedBody.append("# ").append(subject).append(":\n\n"); + combinedBody.append("\n-----\n# ").append(message.sender()).append(" / ").append(subject).append(":\n\n"); combinedBody.append(body); } if (message.attachments() != null) attachments.addAll(message.attachments());