How does one mark all messages as read (imap4flag "seen") with sieve?
Bill Shirley
bill at KnoxvilleChristian.org
Fri Nov 11 17:52:00 UTC 2016
This one is for vmail which is attached.
Bill
On 11/10/2016 8:29 PM, Ben Johnson wrote:
> On 11/10/2016 3:46 AM, Bill Shirley wrote:
>> I don't use the Anti-Spam plugin; I just fire off a BASH script every
>> four hours with
>> crontab which iterates thru the vmail email accounts and trains
>> Spamassassin 'per-user'
>> accounts. If the script sounds interesting I can post it here. It
>> probably could use a little polish
>> though.
>>
>> Bill
> Thanks, Bill!
>
> Sure, please do share the script, if it's not too much trouble.
>
> For my specific use-case, I've been maintaining a "corpus" of known
> ham/spam messages, and enjoy being able to hand
> classify/re-classify/ignore if necessary.
>
> But I do see the appeal of training with a single script that iterates
> through each user's mailbox.
>
> Heretofore, my thinking has been that combining all "submitted" spam,
> which is piped into the training mailbox automatically, whenever a user
> drags from Inbox -> Spam (or vice versa), I have a much broader sample
> of the the ham and spam out there.
>
> And yes, a "shared" corpus among all users does seem to "dilute"
> specific individuals' would-be training preferences a bit, but the
> trade-off seems worthwhile.
>
> Interesting quandary... I would love to see the script! No problem if
> it's a bit "rough around the edges"; the overall concept and approach
> are what's important to me.
>
> -Ben
-------------- next part --------------
#!/bin/bash
# 2015-11-02 add -u to sa-learn; change delete to doveadm expunge
# 2015-07-21 update executable paths and dbpath
# vmail home is organized like: /home/vmail/domains/example.com/bob/Maildir
MAILDIR=Maildir
SPAMDIR="SystemFolders.Spam"
HAMDIR="SystemFolders.Ham"
VMAILHOME=/home/vmail
VMAILUSER=vmail
LS=/usr/bin/ls
RM=/usr/bin/rm
SU=/usr/bin/su
FIND=/usr/bin/find
DOVEADM=/usr/bin/doveadm
SALEARN=/usr/bin/sa-learn
for domain in `$LS "$VMAILHOME/domains"`; do
for user in `$LS $VMAILHOME/domains/$domain`; do
if [ "$user" = "public_html" ]; then continue; fi
dbpath="$VMAILHOME/domains/$domain/$user/.spamassassin"
[ ! -d "$dbpath" ] && continue
prefs="$VMAILHOME/domains/$domain/$user/.spamassassin/user_prefs"
[ ! -f "$prefs" ] && continue
echo "$user@$domain"
#echo "$user@$domain user_prefs=$prefs dbpath=$dbpath"
spamdir="$VMAILHOME/domains/$domain/$user/$MAILDIR/.$SPAMDIR"
hamdir="$VMAILHOME/domains/$domain/$user/$MAILDIR/.$HAMDIR"
saparm=''
if [ -d "$spamdir/new" ]; then
saparm="$saparm --spam $spamdir/new "
fi
if [ -d "$spamdir/cur" ]; then
saparm="$saparm --spam $spamdir/cur "
fi
if [ -d "$hamdir/new" ]; then
saparm="$saparm --ham $hamdir/new "
fi
if [ -d "$hamdir/cur" ]; then
saparm="$saparm --ham $hamdir/cur "
fi
#echo $saparm
if [ x"$saparm" != x ]; then
# $SU -c "$SALEARN --dbpath=$dbpath --prefspath=$prefs $saparm" $VMAILUSER
# $SALEARN --dbpath=$dbpath --prefspath=$prefs $saparm
$SALEARN -u "$VMAILUSER" --dbpath "$dbpath" -p "$prefs" $saparm
fi
# delete using find
# [ -d "$spamdir/new" ] && $FIND "$spamdir/new" -type f -delete
# [ -d "$spamdir/cur" ] && $FIND "$spamdir/cur" -type f -delete
# [ -d "$hamdir/new" ] && $FIND "$hamdir/new" -type f -delete
# [ -d "$hamdir/cur" ] && $FIND "$hamdir/cur" -type f -delete
# next two lines are for testing:
# $DOVEADM -f table fetch -u "$user@$domain" 'date.received' mailbox "$SPAMDIR"
# $DOVEADM -f table fetch -u "$user@$domain" 'date.received' mailbox "$HAMDIR"
# delete using dovecot
$DOVEADM expunge -u "$user@$domain" all mailbox "$SPAMDIR"
$DOVEADM expunge -u "$user@$domain" all mailbox "$HAMDIR"
done
done
More information about the dovecot
mailing list