Перейти к содержанию

Удаление писем пользователя

Если вы хотите удалить старые письма из папок .Junk или .Trash или, возможно, удалить все прочитанные письма старше определенного периода времени, вы можете использовать инструмент dovecot doveadm man doveadm-expunge.

Ручной способ

Итак, приступим:

Удалить письма пользователя в папке «Спам» (Junk), которые прочитаны и старше 4 часов

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

Удалить все письма пользователя в папке «Спам», которые старше 7 дней

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

Удалить все письма (всех пользователей) во всех папках, которые старше 52 недель (внутренняя дата письма, а не дата сохранения в системе => before вместо savedbefore). Полезно для удаления очень старых писем у всех пользователей и во всех папках (особенно актуально для соответствия GDPR).

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

Удалить письма внутри пользовательской папки внутри входящих (Inbox) пользователя, которые не отмечены флажком и старше 2 недель

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

Информация

Информацию о возможных временных интервалах или ключах поиска можно найти в man doveadm-search-query

Планировщик задач

Через cron хост-системы

Если вы хотите автоматизировать подобную задачу, вы можете создать задание cron на вашем хосте, которое вызывает скрипт, подобный приведенному ниже:

#!/bin/bash
# Путь к animails, например: /opt/animails
cd /path/to/your/animails

docker compose exec -T dovecot-animails doveadm expunge -A mailbox 'Junk' savedbefore 2w
docker compose exec -T dovecot-animails doveadm expunge -A mailbox 'Junk' SEEN not SINCE 12h
[...]
#!/bin/bash
# Путь к animails, например: /opt/animails
cd /path/to/your/animails

docker-compose exec -T dovecot-animails doveadm expunge -A mailbox 'Junk' savedbefore 2w
docker-compose exec -T dovecot-animails doveadm expunge -A mailbox 'Junk' SEEN not SINCE 12h
[...]

Чтобы создать задание cron, выполните crontab -e и вставьте примерно следующее для выполнения скрипта:

# Выполнять каждый день в 04:00 утра
0 4 * * * /path/to/your/expunge_mailboxes.sh

Через планировщик задач Docker

Чтобы реализовать это с помощью планировщика задач Docker, используйте этот docker-compose.override.yml вместе с вашим animails:

services:

  dovecot-animails:
    labels:
      ofelia.enabled: "true"
      ofelia.job-exec.dovecot-expunge-junk.schedule: "0 0 4 * * *"
      ofelia.job-exec.dovecot-expunge-junk.command: "doveadm expunge -A mailbox 'Junk' savedbefore 2w"
      ofelia.job-exec.dovecot-expunge-junk.tty: "false"

Мы добавляем несколько меток (labels) к контейнеру dovecot, чтобы активировать планировщик задач и указать ему время запуска в cron-совместимом формате. Примечание: Ofelia использует формат расписания реализации Go cron, который начинается с поля для секунд, а не минут.

Этот docker-compose.override.yml удаляет все письма старше 2 недель из папки «Спам» каждый день в 4 утра. Чтобы убедиться, что всё прошло успешно, вы можете не только проверить свой почтовый ящик, но и просмотреть лог Docker Ofelia, который должен выглядеть примерно так:

common.go:124 ▶ NOTICE [Job "dovecot-expunge-junk" (8759567efa66)] Started - doveadm expunge -A mailbox 'Junk' savedbefore 2w,
common.go:124 ▶ NOTICE [Job "dovecot-expunge-junk" (8759567efa66)] Finished in "285.032291ms", failed: false, skipped: false, error: none,

В случае неудачи будет выведено соответствующее сообщение и результат выполнения doveadm в логе для облегчения отладки.

Если вы хотите добавить больше задач, обязательно измените часть «dovecot-expunge-junk» после «ofelia.job-exec.» на другое значение — это имя задачи. Синтаксис меток можно найти на mcuadros/ofelia.