Sperrliste: automatisches Lernen aus dem Spam-Ordner #2
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
DasAoD/imapfilter-ui!2
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/auto-blacklist-spam-senders"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #1
Was
Neue, per Account aktivierbare Sperrliste (⛔) unter „Filterregeln":
Wie
lib/blacklist.php(neu):sync_spam_blacklist()verbindet sich per IMAP mit dem Spam-Zielordner, trackt den Inhalt Message-ID→Absender in einer per-Userblacklist_state.jsonund diffed gegen den letzten Lauf.lib/generate.php: gesperrte Absender werden im generierten Lua durchgesetzt (inbox:move_messages(...)), unabhängig vom „Automatisch lernen"-Schalter, sobald Einträge vorhanden sind.cron/dispatcher.php: ruft den Abgleich nach jedem erfolgreichen imapfilter-Lauf auf und regeneriert Lua bei Änderungen; der Lockfile pro User wird jetzt bis nach dem Abgleich gehalten (Cron läuft jede Minute).lib/atomic.php: neuerwith_file_lock()-Helper, vonpublic/api/rules.phpundlib/blacklist.phpgemeinsam genutzt, damit Web-UI-Speichern und Cron-Sync sich beim Schreiben vonrules.jsonnicht gegenseitig überschreiben.public/assets/app.js: neue Sperrlisten-Karte, analog zur bestehenden Whitelist-UI.ANLEITUNG.md,README.md: Doku ergänzt.Review
Zwei Runden
code-reviewer+security-checkerauf dem jeweils finalen Stand durchlaufen. Behoben u. a.:rules.json(Lock + Merge statt Überschreiben)blacklist_state.jsonimap_fetch_overview()+ PHP-Stringvergleich statt String-Interpolation in eine IMAP-Query)FILTER_VALIDATE_EMAIL-Prüfung, bevor automatisch gelernte (spammer-kontrollierte) Absenderadressen in generiertes Lua wanderndispatcher.logBekannte, akzeptierte Rand-Einschränkung: Speichert ein User über die Web-UI mit einem veralteten, lokal zwischengespeicherten Formularstand, während der Cron zwischenzeitlich neue Sperreinträge gelernt hat, kann der gelernte Eintrag kurzzeitig wieder verschwinden (kein Datenverlust/-korruption, self-heals beim nächsten Lern-Zyklus). Ein vollständiger 3-Wege-Merge im Frontend wäre für diesen Rand-Fall unverhältnismäßig aufwändig.
🤖 Generated with Claude Code