rspamd_report.sh + train_bayes.sh mit Mehrfach-Filter
rspamd_report.sh wertet /var/log/mail/rspamd.log lesbar aus: Uebersicht als Tabelle (Score, Aktion, Scanzeit, Von, An) und Detailansicht einer Mail mit nach Gewicht sortierter Symbolaufschluesselung samt Summe. Getestet gegen echte Logzeilen, die Summe deckt sich mit dem Score im Log. train_bayes.sh: --only akzeptiert jetzt mehrere Muster (mehrfach angebbar oder kommasepariert), damit sich das Training auf kuratierte Postfaecher begrenzen laesst. Ohne Filter wird das jetzt explizit ausgegeben. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -22,7 +22,11 @@
|
||||
# --apply Wirklich lernen (ohne das passiert nichts)
|
||||
# --max N Max. Nachrichten je Postfach und Klasse (Default 400)
|
||||
# --include-sent Gesendete Mails zusaetzlich als Ham lernen
|
||||
# --only MUSTER Nur Postfaecher, deren Adresse MUSTER enthaelt
|
||||
# --only MUSTER Nur Postfaecher, deren Adresse eines der Muster
|
||||
# enthaelt. Mehrfach angebbar oder kommasepariert:
|
||||
# --only support@,andreas.knuth@
|
||||
# WICHTIG: Ohne diese Option laeuft das Skript ueber
|
||||
# ALLE Postfaecher aller Domains unter /var/mail.
|
||||
# --host HOST:PORT rspamd-Controller (Default 127.0.0.1:11334)
|
||||
#
|
||||
# Passwort: Falls der Controller eines verlangt (bei euch in
|
||||
@@ -48,7 +52,7 @@ MAX_BYTES=5242880 # 5 MB - groessere Mails bringen fuers Lernen nichts
|
||||
BATCH=50 # Dateien pro rspamc-Aufruf
|
||||
APPLY=0
|
||||
INCLUDE_SENT=0
|
||||
ONLY=""
|
||||
ONLY_PATTERNS=()
|
||||
|
||||
usage() { sed -n '2,40p' "$0" | sed 's/^# \{0,1\}//' ; }
|
||||
|
||||
@@ -57,7 +61,8 @@ while [[ $# -gt 0 ]]; do
|
||||
--apply) APPLY=1; shift ;;
|
||||
--max) MAX_PER_CLASS="${2:-}"; shift 2 ;;
|
||||
--include-sent) INCLUDE_SENT=1; shift ;;
|
||||
--only) ONLY="${2:-}"; shift 2 ;;
|
||||
--only) IFS=',' read -ra _pat <<<"${2:-}"
|
||||
ONLY_PATTERNS+=("${_pat[@]}"); shift 2 ;;
|
||||
--host) RSPAMC_HOST="${2:-}"; shift 2 ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) echo "Unbekannte Option: $1" >&2; echo "Hilfe: $0 --help" >&2; exit 1 ;;
|
||||
@@ -126,7 +131,11 @@ else
|
||||
echo "=== Bayes-Training (Trockenlauf - es wird nichts gelernt) ==="
|
||||
fi
|
||||
echo "Basis: ${MAILBASE} | max ${MAX_PER_CLASS} je Postfach und Klasse"
|
||||
[[ -n ${ONLY} ]] && echo "Filter: nur Postfaecher mit '${ONLY}'"
|
||||
if (( ${#ONLY_PATTERNS[@]} > 0 )); then
|
||||
echo "Filter: nur Postfaecher mit '${ONLY_PATTERNS[*]}'"
|
||||
else
|
||||
echo "Filter: KEINER - es werden ALLE Postfaecher unter ${MAILBASE} erfasst"
|
||||
fi
|
||||
printf '\n%-42s %8s %8s\n' "POSTFACH" "SPAM" "HAM"
|
||||
printf -- '---------------------------------------------------------------\n'
|
||||
|
||||
@@ -145,7 +154,14 @@ for domain_dir in "${MAILBASE}"/*/; do
|
||||
[[ -d ${user_dir}/cur ]] || continue # keine Maildir -> ueberspringen
|
||||
|
||||
mailbox="$(basename "${user_dir}")@${domain}"
|
||||
[[ -n ${ONLY} && ${mailbox} != *"${ONLY}"* ]] && continue
|
||||
|
||||
if (( ${#ONLY_PATTERNS[@]} > 0 )); then
|
||||
matched=0
|
||||
for pat in "${ONLY_PATTERNS[@]}"; do
|
||||
[[ ${mailbox} == *"${pat}"* ]] && { matched=1; break; }
|
||||
done
|
||||
(( matched )) || continue
|
||||
fi
|
||||
|
||||
mapfile -t spam_files < <(gather "${MAX_PER_CLASS}" \
|
||||
"${user_dir}/.Junk/cur" "${user_dir}/.Junk/new" \
|
||||
|
||||
Reference in New Issue
Block a user