From 11c70bdfae7d26d47b7872725f7230f3b3d8435a Mon Sep 17 00:00:00 2001 From: Mario Alegre Date: Sun, 2 Aug 2020 18:31:59 -0400 Subject: [PATCH] changed maint script to be run only for a specific user --- src/mailsrv/assets/bin/maint | 76 +++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/src/mailsrv/assets/bin/maint b/src/mailsrv/assets/bin/maint index b504c73..0995aca 100755 --- a/src/mailsrv/assets/bin/maint +++ b/src/mailsrv/assets/bin/maint @@ -1,40 +1,46 @@ #!/bin/bash -cd /vol/mail +if [[ -z $1 ]]; then + echo "Usage: $(basename $0) user" + exit 1 +else + user=$1 +fi -for user in *; do - # create an archive mailbox (and throw away error because - # we don't mind if it already exists) - doveadm mailbox create -u $user -s Archive 2> /dev/null - - # assume no messages in INBOX are older than this year - year=2000 - while [[ $year -le $currentyear ]]; do - # create an Archive/$year mailbox - doveadm mailbox create -u $user -s Archive.$year 2> /dev/null - - # Get list of all subdirs of INBOX - mailboxes=$(doveadm mailbox list -u $user | grep -E '^INBOX\..*$' \ - | perl -pe 'chomp if eof' | perl -pe 's/^/MAILBOX /' \ - | perl -pe 's/\n/ OR /') - # add Sent and INBOX to our mailboxes list - mailboxes="MAILBOX Sent OR MAILBOX INBOX ${mailboxes:+OR} $mailboxes" - # move to the Archive/$year mailbox messages that: - # have been flagged as read, - # were received on or before $year, - # are older than 90 days, - # and are in our aforementioned mailboxes - doveadm move -u $user Archive.$year SEEN BEFORE 1-Jan-$(($year+1)) \ - BEFORE 90d \( $mailboxes \) - - # delete Archive/$year mailbox if it is empty - doveadm mailbox delete -u $user -e Archive.$year 2> /dev/null - - # step year variable - year=$(($year+1)) - done - - # delete messages from Trash that have been there for more than 2 weeks - doveadm expunge -u $user SAVEDBEFORE 2w MAILBOX Trash +cd /vol/mail +# create an archive mailbox (and throw away error because +# we don't mind if it already exists) +doveadm mailbox create -u "$user" -s Archive 2> /dev/null + +# assume no messages in INBOX are older than this year +year=2000 +currentyear=$(date +%Y) + +while [[ $year -le $currentyear ]]; do + # create an Archive/$year mailbox + doveadm mailbox create -u $user -s Archive.$year 2> /dev/null + + # Get list of all subdirs of INBOX + mailboxes=$(doveadm mailbox list -u $user | grep -E '^INBOX\..*$' \ + | perl -pe 'chomp if eof' | perl -pe 's/^/MAILBOX /' \ + | perl -pe 's/\n/ OR /') + # add Sent and INBOX to our mailboxes list + mailboxes="MAILBOX Sent OR MAILBOX INBOX ${mailboxes:+OR} $mailboxes" + # move to the Archive/$year mailbox messages that: + # have been flagged as read, + # were received on or before $year, + # are older than 90 days, + # and are in our aforementioned mailboxes + doveadm move -u $user Archive.$year SEEN BEFORE 1-Jan-$(($year+1)) \ + BEFORE 90d \( $mailboxes \) + + # delete Archive/$year mailbox if it is empty + doveadm mailbox delete -u $user -e Archive.$year 2> /dev/null + + # increment year variable + year=$(($year+1)) done + +# delete messages from Trash that have been there for more than 2 weeks +doveadm expunge -u $user SAVEDBEFORE 2w MAILBOX Trash