Das Projekt IMAP-Spam-Cleaner ist ein Tool, das speziell dafür entwickelt wurde, Spam aus IMAP-Postfächern zu entfernen. Es läuft als Docker-Container und kann über eine Konfigurationsdatei (config.yml) an die eigenen Bedürfnisse angepasst werden. Das Skript verbindet sich mit deinem IMAP-Server, durchsucht definierte Ordner nach unerwünschten E-Mails und löscht oder verschiebt sie automatisch. Besonders praktisch: Du behältst die volle Kontrolle über die Regeln und die Ausführung. Hier mein Setup, womit ich versuche, meinen E-Mail-Server zu entlasten.
Voraussetzungen:
- Docker installiert
- IMAP-Zugangsdaten deines E-Mail-Anbieters
- Grundlegende Kenntnisse der Kommandozeile
Das Setup:
- Repository klonen oder Docker-Image herunterladen:
docker pull dominicgisler/imap-spam-cleaner:latest
- Konfigurationsdatei anpassen:
Erstelle eineconfig.ymlmit deinen IMAP-Zugangsdaten und den gewünschten Regeln. Beispiel:
logging:
level: debug # logging level (panic, fatal, error, warn, info, debug, trace)
providers: # providers to be used for inboxes
prov1: # provider name
type: openai # provider type
config: # provider specific configuration
apikey: some-api-key # openai apikey
model: gpt-4o-mini # openai model to use
maxsize: 100000 # message size limit for prompt (bytes)
prov2: # provider name
type: ollama # provider type
config: # provider specific configuration
url: http://127.0.0.1:11434 # ollama url
model: gpt-oss:20b # ollama model to use
maxsize: 100000 # message size limit for prompt (bytes)
prov3: # provider name
type: spamassassin # provider type
config: # provider specific configuration
host: 127.0.0.1 # spamassassin host
port: 783 # spamassassin port
maxsize: 300000 # message size limit
timeout: 10s # connection timeout
whitelists: # trusted senders as regexp, not to be analyzed
whitelist1: # example with exact addresses
- ^.* <in**@*****le.com>$ # matches <in**@*****le.com>
- ^.* <co*****@****in.com>$ # matches <co*****@****in.com>
whitelist2: # example with only domain match
- ^.* <.*@example.com>$ # matches for all @example.com addresses
- ^.* <.*@domain.com>$ # matches for all @domain.com addresses
inboxes: # inboxes to be checked
- schedule: "0 3 * * *" # schedule in cron format (when to execute spam analysis)
host: mail.domain.tld # imap host
port: 143 # imap port
tls: false # imap tls
username: us**@****in.tld # imap user
password: mypass # imap password
provider: prov1 # provider used for spam analysis
inbox: INBOX # inbox folder
spam: INBOX.Spam # spam folder
minscore: 75 # min score to detect spam (0-100)
minage: 0h # min age of message
maxage: 24h # max age of message
whitelist: whitelist1 # whitelist to use, empty/missing = no whitelistCode-Sprache: PHP (php)
3. Container starten:
docker run -d --name imap-spam-cleaner -v ./config.yml:/app/config.yml:ro dominicgisler/imap-spam-cleanerCode-Sprache: JavaScript (javascript)
Das Skript läuft nun im Hintergrund und bereinigt dein Postfach nach den definierten Regeln
Automatisierung mit Cronjob
Damit das Skript regelmäßig ausgeführt wird, richtest du einen Cronjob ein. Öffne die Crontab mit:
crontab -e
Füge folgende Zeile hinzu, um das Skript täglich um 3 Uhr morgens auszuführen:
0 3 * * * docker start -a imap-spam-cleaner
So wird dein Postfach jeden Tag automatisch bereinigt, ohne dass du manuell eingreifen musst.
KI-Unterstützung: Ollama lokal einbinden und im Docker-Container nutzen
Um Ollama lokal für die Spam-Erkennung zu nutzen und sicherzustellen, dass der IMAP-Spam-Cleaner-Docker-Container darauf zugreifen kann, sind zwei Schritte nötig: die Installation von Ollama auf deinem Host-System und die Anpassung der Docker-Konfiguration, damit der Container auf Ollama zugreifen kann.
Ollama auf dem Host installieren
- Lade Ollama von der offiziellen Website herunter und installiere es direkt auf deinem Server oder Rechner.
- Lade das gewünschte Modell herunter, z. B.:
ollama pull llama3Ollama läuft standardmäßig aufhttp://127.0.0.1:11434und stellt eine REST-API bereit, die du für die E-Mail-Analyse verwenden kannst.
Docker-Compose anpassen
Damit der IMAP-Spam-Cleaner-Container auf Ollama zugreifen kann, musst du den network_mode: host setzen. So sieht die angepasste docker-compose.yml aus:
version: "3.8"
services:
imap-spam-cleaner:
image: dominicgisler/imap-spam-cleaner:latest
container_name: imap-spam-cleaner
network_mode: host # Ermöglicht Zugriff auf Ollama auf localhost
volumes:
- ./config.yml:/app/config.yml:ro
restart: alwaysCode-Sprache: PHP (php)
Wichtig:
network_mode: hostsorgt dafür, dass der Container das Netzwerk des Hosts nutzt und so auf127.0.0.1:11434(Ollama) zugreifen kann.- Ohne diese Einstellung könnte der Container Ollama nicht erreichen, da Docker standardmäßig ein isoliertes Netzwerk verwendet.
Konfiguration der config.yml
Trage Ollama als Provider in der config.yml ein und weise ihn deinem Postfach zu:
logging:
level: info
providers:
prov1:
type: ollama
config:
url: http://127.0.0.1:11434 # Ollama läuft auf dem Host
model: llama3 # Modellname, z. B. llama3, mistral, etc.
maxsize: 100000 # Maximale Größe der E-Mail-Inhalte für die Analyse
whitelists:
whitelist1:
- .* <in**@*****le.com>$
- .* <co*****@****in.com>$
inboxes:
- schedule: "0 3 * * *" # Täglich um 3 Uhr ausführen
host: mail.domain.tld
port: 143
tls: false
username: us**@****in.tld
password: dein-passwort
provider: prov1 # Ollama als Provider auswählen
inbox: INBOX
spam: INBOX.Spam # Zielordner für Spam
minscore: 75 # Mindestpunktzahl für Spam-Erkennung (0-100)
minage: 0h
maxage: 24h
whitelist: whitelist1Code-Sprache: PHP (php)
Funktionsweise
- Der IMAP-Spam-Cleaner sendet den Inhalt neuer E-Mails an Ollama.
- Ollama analysiert die E-Mail und entscheidet, ob es sich um Spam handelt.
- E-Mails, die den
minscoreüberschreiten, werden automatisch verschoben oder gelöscht.
Container starten
Starte den Container mit der aktualisierten Konfiguration:
docker-compose up -d
Überprüfe die Logs, um sicherzustellen, dass die Verbindung zu Ollama funktioniert:
docker logs imap-spam-cleaner
Vorteile dieser Lösung
- Lokale KI: Alle Daten bleiben auf deinem Server, keine Übertragung an externe Dienste.
- Flexibilität: Du kannst Modelle und Regeln jederzeit anpassen.
- Kosteneffizienz: Keine API-Gebühren für externe KI-Dienste.
Hinweis: Falls Ollama nicht auf dem Standard-Port läuft oder du mehrere Instanzen nutzt, passe die url in der config.yml entsprechend an. Für eine noch präzisere Spam-Erkennung kannst du den Prompt in der Konfiguration anpassen, z. B.:
config:
url: http://127.0.0.1:11434
model: llama3
prompt: "Prüfe, ob diese E-Mail Spam ist. Achte auf Werbelinks, unseriöse Absender oder verdächtige Formulierungen. Antworte nur mit 'Spam' oder 'Kein Spam': {email_content}"Code-Sprache: JavaScript (javascript)
Mit dieser Einrichtung nutzt du die volle Power lokaler KI – ohne Kompromisse bei Datenschutz oder Kontrolle.
Falls du Fragen zur Feinabstimmung oder zur Fehlerbehebung hast, lass es mich wissen!
