Beim suchen der Autolearn Funktion im Panel, stellte ich fest, keine da.
Wieso, weshalb warum, keine Ahnung.
Beim durchsehen der Serverconfigs, irgendwie auch keine Spur.
Also, selbst ist der Admin und ran ans Werk.
Vorwort
Alle Änderungen erfolgen auf eigene Gefahr, für Probleme seid Ihr selbst verantwortlich.
Ich übernehme keinerlei Verantwortung wenn was nicht läuft oder sonst welche Fehler auftretten, egal ob jetzt oder zukünftig.
Beachtet auch, dass wenn KH die Funktion später integriert, es zu Problemen kommen könnte.
Eventuell vorhandene Regeln zB. aus RoundCube finden weiter Anwendung.
Die Anpassungen in DoveCot
/etc/dovecot/conf.keyhelp.d/20-protocols.conf
Code: Select all
protocols = imap pop3 lmtp sieve
mail_max_userip_connections = 10
protocol imap {
imap_logout_format = in=%i out=%o
mail_plugins = $mail_plugins imap_quota imap_sieve
}
protocol pop3 {
pop3_logout_format = in=%i out=%o top=%t/%p retr=%r/%b del=%d/%m size=%s
pop3_uidl_format = UID%u-%v
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = $mail_plugins sieve
postmaster_address = postmaster@SERVERHOSTNAME
sendmail_path = /usr/sbin/sendmail
}
protocol lmtp {
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = $mail_plugins sieve
postmaster_address = postmaster@SERVERHOSTNAME
sendmail_path = /usr/sbin/sendmail
}
protocol sieve {
managesieve_max_line_length = 65536
}
^^ SERVERHOSTNAME muss durch euren vollen Hostname ersetzt werden ^^
/etc/dovecot/conf.keyhelp.d/90-plugins.conf
Code: Select all
plugin {
quota = maildir:User quota
quota_limit = 10%%
sieve_plugins = sieve_imapsieve sieve_extprograms
sieve_before = /etc/dovecot/sieve/spam-global.sieve
sieve = file:/var/mail/vhosts/%d/%n/sieve/scripts;active=/var/mail/vhosts/%d/%n/sieve/active.sieve
sieve_storage = /var/mail/vhosts/%d/%n/sieve
#
# Wird von irgendwo in den Spam-Ordner verschoben oder der Status im Spam-Ordner geändert dann ...
#
imapsieve_mailbox1_name = Junk
imapsieve_mailbox1_causes = COPY
imapsieve_mailbox1_before = file:/etc/dovecot/sieve/learn-spam.sieve
#
# Wird vom Spam-Ordner irgendwo anders hin verschoben dann ...
#
imapsieve_mailbox2_name = *
imapsieve_mailbox2_from = Junk
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_before = file:/etc/dovecot/sieve/learn-ham.sieve
sieve_pipe_bin_dir = /usr/bin
sieve_global_extensions = +vnd.dovecot.pipe
}
Im Ordner "/etc/dovecot" einen weiteren Ordner mit dem Namen "sieve" erstellen.
Jetzt werden unter "/etc/dovecot/sieve" 3 Dateien erstellt, spam-global.sieve, learn-spam.sieve und learn-ham.sieve.
/etc/dovecot/sieve/learn-ham.sieve
Code: Select all
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];
if environment :matches "imap.mailbox" "*" {
set "mailbox" "${1}";
}
if string "${mailbox}" "Trash" {
stop;
}
pipe :copy "rspamc" ["learn_ham"];
/etc/dovecot/sieve/learn-spam.sieve
Code: Select all
require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_spam"];
/etc/dovecot/sieve/spam-global.sieve
Code: Select all
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
}
if header :is "X-Spam" "Yes" {
fileinto "Junk";
}
Hinweis:
Alle Daten und Ordner gehören dem User "vmail" und der Gruppe "dovecot".
Die Rechte der Daten ist 640 und des Ordners sieve ist 750.
Die Anpassungen in Rspamd
Unter "/etc/rspamd/local.d" die Datei "milter_headers.conf" erstellen.
/etc/rspamd/local.d/milter_headers.conf
Code: Select all
use = ["x-spamd-bar", "x-spam-level", "authentication-results"];
authenticated_headers = ["authentication-results"];
Unter "/etc/rspamd/override.d" die Datei "classifier-bayes.conf" erstellen.
/etc/rspamd/override.d/classifier-bayes.conf
Code: Select all
backend = "redis";
autolearn = true;
Danach die Dienste Rspamd und DoveCot neustarten.
Alles was jetzt in den Junkordner wandert wird als Spam gelernt.
Alles was aus dem Junkordner rausgezogen wird, egal wohin, lernt das System als kein Junk.
Mails die aus Junk in den Papierkorb wandern lösen kein "lernen" aus.
Das war es auch schon.
Es wird eine weile dauern bis das System genug "gelernt" hat, um zuverlässig zu sortieren.
Nachtrag
Bereits im Junkordner vorhandene Mails werden nicht berücksichtigt, da das System erst bei "Bewegung" einer Mail greift.
Um bereits im Junkordner vorhandene Mails einzulernen, kann folgender Befehl genutzt werden:
Code: Select all
find /var/mail/vhosts/*/*/.Junk/cur -type f -exec /usr/bin/rspamc learn_spam {} \;
*** Nachtrag 2 ***
Wie ich bemerkt habe, gibt es ein kleines Rechteproblem.
Grund ist die "ProtectSystem=full" Angabe in "/etc/systemd/system/multi-user.target.wants/dovecot.service".
Die ein oder andere Flachzange würde wohl jetzt das "ProtectSystem" abschalten bzw. minimieren, Selbstmord auf Raten.
Richtig ist hier eine "Ausnahme" im Bereich "Service" mit dem betroffenen Pfad zu setzen.
Das ganze sieht wie nachfolgend aus:
Code: Select all
Environment="ReadWritePaths=/etc/dovecot/sieve/"
Code: Select all
# This file is part of Dovecot
#
# DO NOT CUSTOMIZE THIS FILE, INSTEAD
# create the file:
# `/etc/systemd/system/dovecot.service.d/service.conf'.
# or copy this as
# `/etc/systemd/system/dovecot.service` and edit then
# and put your changes there
[Unit]
Description=Dovecot IMAP/POP3 email server
Documentation=man:dovecot(1)
Documentation=https://doc.dovecot.org/
After=local-fs.target network-online.target
[Service]
Type=notify
Environment="ReadWritePaths=/etc/dovecot/sieve/"
ExecStart=/usr/sbin/dovecot -F
ExecReload=/usr/bin/doveadm reload
ExecStop=/usr/bin/doveadm stop
PrivateTmp=true
NonBlocking=yes
ProtectSystem=full
ProtectHome=no
PrivateDevices=true
# You can add environment variables with e.g.:
#Environment='CORE_OUTOFMEM=1'
# If you have trouble with `Too many open files', increase
LimitNOFILE=65535
# If you want to allow the Dovecot services to produce core dumps, use:
#LimitCORE=infinity
[Install]
WantedBy=multi-user.target
Code: Select all
systemctl daemon-reload
systemctl restart dovecot