You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.5 KiB
46 lines
1.5 KiB
#!/bin/bash
|
|
|
|
if [[ -z $1 ]]; then
|
|
echo "Usage: $(basename $0) user"
|
|
exit 1
|
|
else
|
|
user=$1
|
|
fi
|
|
|
|
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=2010
|
|
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
|
|
|