Portál AbcLinuxu, 30. dubna 2025 23:08
INBOX INBOX.Drafts INBOX.Sent INBOX.Trash INBOX.SPAM INBOX.SPAM.isSPAM INBOX.SPAM.noSPAMDo složky SPAM je doručena každá zpráva, která je DSPAMem vyhodnocena jako SPAM. V případě chybného vyhodnocení zprávy jako SPAM (false positive) postačí, aby uživatel tuto zprávu přesunul do podsložky noSPAM. V případě chybného vyhodnocení zprávy jako neSPAM (false negative) postačí, aby uživatel tuto zprávu přesunul do podsložky isSPAM. Tento postup mj. odstraňuje všechna výše zmíněná úskalí - uživatelé nepřeposílají, ale většinou zprávy jednoduše drag&drop přesunou přímo ve svém oblíbeném e-mailovém klientovi do příslušné složky, bez problémů takto mohou přesunovat více zpráv najednou a při přesouvání mezi složkami nedochází ke změně obsahu, tzn. nemůže dojít ke ztrátě identifikační značky DSPAMu. Sám o sobě by tento mechanismus nefungoval, na straně serveru je proto potřeba zajistit proces, který bude procházet tyto podsložky a předávat obsažené zprávy DSPAMu ke znovuzpracování. Uvedu zde jednoduchý příklad, který úspešně používám na serverech s malým počtem uživatelů, kteří na serveru mají bežný účet (tzn. nejedná se o virtuální uživatele). Celé řešení je nezávislé na použitém softwaru pro realizaci potřebných služeb (SMTP, IMAP ..). Ve většině instalací používám k plné spokojenosti Postfix v kombinaci s Maildropem a Courier-IMAPem.
Postfix -> Maildrop[ClamAV,DSPAM] -> Maildir <-> Courier-IMAPGlobální konfigurační soubor pro MDA Maildrop, který zajistí antivirovou kontrolu přes ClamAV a přesunutí zprávy vyhodnocené jako SPAM do příslušné složky vypadá takto:
DEFAULT="$HOME/Maildir" SPAMFOLDER="$DEFAULT/.SPAM/" if(`/usr/bin/clamdscan --no-summary --stdout - | grep -c 'FOUND'` == 1) { to "/dev/null" } xfilter "/usr/bin/dspamc --user $USER --stdout --deliver=innocent,spam" if(/^X-DSPAM-Result: Spam.*$/) { to $SPAMFOLDER } to $DEFAULTSkript, který prochází příslušné podsložky schránky a předává nalezené zprávy ke znovuzpracování DSPAMu, může v tomto případě vypadat takto:
#!/bin/bash MAILDIR=$HOME/Maildir SPAMFOLDER=$MAILDIR/.SPAM ISSPAMFOLDER=$SPAMFOLDER.isSPAM NOSPAMFOLDER=$SPAMFOLDER.noSPAM DSPAM_FP="dspamc --user $USER --class=innocent --source=error --stdout --deliver=spam,innocent" DSPAM_FN="dspamc --user $USER --class=spam --source=error --stdout --deliver=spam,innocent" for folder in {$NOSPAMFOLDER/cur,$NOSPAMFOLDER/new,$ISSPAMFOLDER/cur,$ISSPAMFOLDER/new}; do for message in `ls -A $folder`; do mv "$folder/$message" "$folder/../tmp/" done done for falsepositive in `ls -A $NOSPAMFOLDER/tmp`; do cat "$NOSPAMFOLDER/tmp/$falsepositive" | $DSPAM_FP > "$MAILDIR/new/$falsepositive" rm "$NOSPAMFOLDER/tmp/$falsepositive" done for falsenegative in `ls -A $ISSPAMFOLDER/tmp`; do cat "$ISSPAMFOLDER/tmp/$falsenegative" | $DSPAM_FN > "$SPAMFOLDER/new/$falsenegative" rm "$ISSPAMFOLDER/tmp/$falsenegative" doneTento skript je v pravidelných intervalech (např. 5 minut) automaticky spouštěn z uživatelské cron tabulky. Hodí se pro menší instalace s lokálními účty.
Tiskni
Sdílej:
to $DEFAULTvlozim filtraci pres SpamAssasin a v pripade vyhodnoceni jako SPAM se zprava presune do slozky SPAM.isSPAM, kde je nasledne automaticky predana DSPAMu ke znovuvyhodnoceni:
xfilter "/usr/bin/spamc" if (/^X-Spam-Level: \*\*\*\*\*.*$/) { to "$SPAMFOLDER/.isSPAM/" }
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.