mailcow-dockerized-docs/docs/u_e-dovecot-expunge.md
Braintelligence 1f6c8a416b
Additional example for expunge, useful for cleanup
Additional example for expunge, useful for cleanup of old mails. I used this to clean mails that were older than 5 years.
2020-10-05 10:03:45 +02:00

2,2 KiB

If you want to delete old mails out of the .Junk or .Trash folders or maybe delete all read mails that are older than a certain amount of time you may use dovecot's tool doveadm man doveadm-expunge.

The manual way

That said, let's dive in:

Delete a user's mails inside the junk folder that are read and older than 4 hours

docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'Junk' SEEN not SINCE 4h

Delete all user's mails in the junk folder that are older than 7 days

docker-compose exec dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 7d

Delete all mails (of all users) in all folders that are older than 52 weeks (internal date of the mail, not the date it was saved on the system => before instead of savedbefore). Useful for deleting very old mails on all users and folders (thus especially useful for GDPR-compliance).

docker-compose exec dovecot-mailcow doveadm expunge -A mailbox % before 52w

Delete mails inside a custom folder inside a user's inbox that are not flagged and older than 2 weeks

docker-compose exec dovecot-mailcow doveadm expunge -u 'mailbox@example.com' mailbox 'INBOX/custom-folder' not FLAGGED not SINCE 2w

!!! info For possible time spans or search keys have a look at man doveadm-search-query

Make it automatic

If you want to automate such a task you can create a cron job on your host that calls a script like the one below:

#!/bin/bash
# Path to mailcow-dockerized, e.g. /opt/mailcow-dockerized
cd /path/to/your/mailcow-dockerized

/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' savedbefore 2w
/usr/local/bin/docker-compose exec -T dovecot-mailcow doveadm expunge -A mailbox 'Junk' SEEN not SINCE 12h
[...]

To create a cron job you may execute crontab -e and insert something like the following to execute a script:

# Execute everyday at 04:00 A.M.
0 4 * * * /path/to/your/expunge_mailboxes.sh