From ec1b82f5d64422f1415fb87d4743d29d453ebe98 Mon Sep 17 00:00:00 2001 From: Mario Alegre Date: Mon, 29 Jun 2020 01:21:32 +0000 Subject: [PATCH 1/3] added auto-archive script for mailsrv --- src/mailsrv/Containerfile | 6 ++++++ src/mailsrv/assets/bin/maint | 39 ++++++++++++++++++++++++++++++++++++ src/mailsrv/assets/crontab | 4 ++++ 3 files changed, 49 insertions(+) create mode 100755 src/mailsrv/assets/bin/maint create mode 100644 src/mailsrv/assets/crontab 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..f24ffae --- /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 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 From ddaf05794a9fe229fd7faceb04473d8d3096d4f0 Mon Sep 17 00:00:00 2001 From: Mario Alegre Date: Mon, 29 Jun 2020 01:26:56 +0000 Subject: [PATCH 2/3] quick bugfix --- src/mailsrv/assets/bin/maint | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mailsrv/assets/bin/maint b/src/mailsrv/assets/bin/maint index f24ffae..45123d6 100755 --- a/src/mailsrv/assets/bin/maint +++ b/src/mailsrv/assets/bin/maint @@ -12,7 +12,7 @@ for user in *; do # assume no messages in INBOX are older than this year #year=2000 year=$(($currentyear-1)) - while [[ year -le $currentyear ]]; do + while [[ $year -le $currentyear ]]; do # create an Archive/$year mailbox doveadm mailbox create -u $user -s Archive.$year 2> /dev/null From d5a2ea4e8dc62698dce70e4487add22c668a268a Mon Sep 17 00:00:00 2001 From: Mario Alegre Date: Mon, 29 Jun 2020 01:30:12 +0000 Subject: [PATCH 3/3] quick bugfix --- src/mailsrv/assets/bin/maint | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mailsrv/assets/bin/maint b/src/mailsrv/assets/bin/maint index 45123d6..8a9fc8b 100755 --- a/src/mailsrv/assets/bin/maint +++ b/src/mailsrv/assets/bin/maint @@ -21,7 +21,7 @@ for user in *; do | 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 INBOX ${mailboxes:+OR} $mailboxes" + 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,