From 5cd8c125d691b2b09153a1cf05f2b3717483e686 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 14:04:15 +0000 Subject: [PATCH 1/3] Initial plan From 7644ed6f35d8b4f0a432e7f8091a76f1b16abeb4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 14:09:36 +0000 Subject: [PATCH 2/3] Add DisableEmailAgeThreshold configuration option with warning Co-authored-by: andreaslampe <68891717+andreaslampe@users.noreply.github.com> --- MailAgent/Options/MailAgentOptions.cs | 2 ++ MailAgent/Services/ConfigurationValidator.cs | 12 ++++++++++++ MailAgent/Services/MailService.cs | 2 +- MailAgent/appsettings.json | 4 +++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/MailAgent/Options/MailAgentOptions.cs b/MailAgent/Options/MailAgentOptions.cs index a9769d1..09bfe96 100644 --- a/MailAgent/Options/MailAgentOptions.cs +++ b/MailAgent/Options/MailAgentOptions.cs @@ -26,5 +26,7 @@ public class MailAgentOptions public string HeartbeatUrl { get; set; } = string.Empty; public string O365ClientId { get; set; } = string.Empty; + + public bool DisableEmailAgeThreshold { get; set; } = false; } } diff --git a/MailAgent/Services/ConfigurationValidator.cs b/MailAgent/Services/ConfigurationValidator.cs index a22fcb8..5ac32da 100644 --- a/MailAgent/Services/ConfigurationValidator.cs +++ b/MailAgent/Services/ConfigurationValidator.cs @@ -21,6 +21,18 @@ public List ValidateConfiguration() { var issues = new List(); + // Check if email age threshold is disabled + if (_options.DisableEmailAgeThreshold) + { + issues.Add(new ConfigurationIssue + { + Severity = IssueSeverity.Warning, + Category = "EmailAgeThreshold", + Message = "Email age threshold is DISABLED. All unread emails will be processed regardless of age.", + Hint = "This setting is intended for testing purposes only. DO NOT use in production! Set 'DisableEmailAgeThreshold' to false for production use." + }); + } + if (!_options.EmailSettings.Any()) { issues.Add(new ConfigurationIssue diff --git a/MailAgent/Services/MailService.cs b/MailAgent/Services/MailService.cs index 755662d..a456c7d 100644 --- a/MailAgent/Services/MailService.cs +++ b/MailAgent/Services/MailService.cs @@ -113,7 +113,7 @@ await client.Connect( && !sender.Contains(siteEmailSetting.EMailSenderFilter, StringComparison.InvariantCultureIgnoreCase); // Message is too old - if ((DateTimeOffset.Now - eMail.message.Date).Duration() > TimeSpan.FromMinutes(15)) + if (!_options.DisableEmailAgeThreshold && (DateTimeOffset.Now - eMail.message.Date).Duration() > TimeSpan.FromMinutes(15)) { _log.LogInformation($"Mail with subject '{eMail.message.Subject}' received delayed. EMail was sent at {eMail.message.Date.ToLocalTime()}. Ignore and mark as read."); diff --git a/MailAgent/appsettings.json b/MailAgent/appsettings.json index 7b2950d..8d2fba1 100644 --- a/MailAgent/appsettings.json +++ b/MailAgent/appsettings.json @@ -70,6 +70,8 @@ "EMailMode": "Imap", "IgnoreCertificateErrors": false, "HeartbeatInterval": "00:00:10", - "HeartbeatUrl": "" + "HeartbeatUrl": "", + "_comment_DisableEmailAgeThreshold": "Set to true to process emails older than 15 minutes. FOR TESTING ONLY!", + "DisableEmailAgeThreshold": false } } From 4a7c341edd15a0cc5f500e49479dac9afc96da9c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 14:18:18 +0000 Subject: [PATCH 3/3] Remove comment from appsettings.json and extend documentation Co-authored-by: andreaslampe <68891717+andreaslampe@users.noreply.github.com> --- MailAgent/appsettings.json | 1 - MailAgent/readme.md | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/MailAgent/appsettings.json b/MailAgent/appsettings.json index 8d2fba1..f735be4 100644 --- a/MailAgent/appsettings.json +++ b/MailAgent/appsettings.json @@ -71,7 +71,6 @@ "IgnoreCertificateErrors": false, "HeartbeatInterval": "00:00:10", "HeartbeatUrl": "", - "_comment_DisableEmailAgeThreshold": "Set to true to process emails older than 15 minutes. FOR TESTING ONLY!", "DisableEmailAgeThreshold": false } } diff --git a/MailAgent/readme.md b/MailAgent/readme.md index bb4c053..763cd63 100644 --- a/MailAgent/readme.md +++ b/MailAgent/readme.md @@ -91,6 +91,8 @@ Für das entwickeln der regulären Ausdrücke sind folgende Seiten/Tools hilfrei https://regex101.com/ (testen und entwickeln) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Cheatsheet (allgemeine Informationen) +**Tipp zum Testen von regulären Ausdrücken:** Um reguläre Ausdrücke mit älteren E-Mails zu testen, kann die Einstellung `DisableEmailAgeThreshold` auf `true` gesetzt werden. Dadurch werden auch E-Mails verarbeitet, die älter als 15 Minuten sind. Siehe Abschnitt `MailAgentOptions` für weitere Details. + ## Konfiguration ### Abschnitt `Serilog` @@ -133,6 +135,7 @@ Weitere Einstellungen: * `HeartbeatInterval` -> Intervall für das Senden von Heartbeats. (z.B. an UptimeRobot) * `HeartbeatUrl` -> HTTP-GET Endpunkt, der für Heartbeats aufgerufen werden soll * `O365ClientId` -> Die Client-ID für die O365 OAuth2-Authentifizierung (nur erforderlich bei Verwendung von `O365` Authentifizierung). Der Standardwert ist eine öffentliche Client-ID. +* `DisableEmailAgeThreshold` -> Deaktiviert die 15-Minuten-Altersschwelle für E-Mails. **Nur für Testzwecke!** Standardmäßig werden E-Mails, die älter als 15 Minuten sind, ignoriert und als gelesen markiert. Wenn diese Einstellung auf `true` gesetzt wird, werden alle ungelesenen E-Mails unabhängig vom Alter verarbeitet. Dies ist nützlich zum Testen von regulären Ausdrücken mit älteren E-Mails. **Warnung:** Diese Einstellung sollte in Produktivumgebungen NICHT aktiviert werden! Bei Aktivierung wird beim Start eine deutliche Warnung angezeigt. ## Copyright Copyright Feuer Software GmbH, Karlsbader Str. 16, Eschborn