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