diff --git a/src/mailsrv/Containerfile b/src/mailsrv/Containerfile index 8e74fb7..4c668d0 100644 --- a/src/mailsrv/Containerfile +++ b/src/mailsrv/Containerfile @@ -35,6 +35,12 @@ RUN addgroup --gid ${FILESUID:?} vmail && \ # copy our custom scripts COPY assets/bin /usr/local/bin +# copy root's crontab +COPY assets/crontab /root/ + +# load root's crontab +RUN crontab /root/crontab + ### ### mkvirtual ### diff --git a/src/mailsrv/assets/bin/maint b/src/mailsrv/assets/bin/maint new file mode 100755 index 0000000..8a9fc8b --- /dev/null +++ b/src/mailsrv/assets/bin/maint @@ -0,0 +1,39 @@ +#!/bin/bash + +cd /vol/mail + +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 + + # get current year + currentyear=$(date +%Y) + # assume no messages in INBOX are older than this year + #year=2000 + year=$(($currentyear-1)) + 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 messages from Trash that have been there for more than 2 weeks + doveadm expunge -u $user SAVEDBEFORE 2w MAILBOX Trash + + # step year variable + year=$(($year+1)) + done +done diff --git a/src/mailsrv/assets/crontab b/src/mailsrv/assets/crontab new file mode 100644 index 0000000..35a1066 --- /dev/null +++ b/src/mailsrv/assets/crontab @@ -0,0 +1,4 @@ +# m h dom mon dow command + +# Run daily mail maintenance +11 1 * * * /usr/local/bin/maint