Итак, я пытаюсь настроить автоматическое удаление сообщений в Dovecot, используя cronjob для ежедневного запуска doveadm expunge
и еженедельно doveadm purge
чтобы очистить старые сообщения с некоторыми заданными критериями (в основном вещи в корзине и папках нежелательной почты, все остальное я архивирую вместо этого).
Проблема заключается в следующей команде удаления:
doveadm expunge -A SEEN BEFORE 7d MAILBOX Trash
Это кажется хорошим балансом, однако, если пользователь откроет непрочитанное сообщение прямо на границе семидневного отсечения, оно может быть удалено, прежде чем они смогут что-то с ним сделать, например переместить его в другой почтовый ящик.
Я знаю, что это крайний случай, но я надеялся выполнить какое-то многоэтапное удаление, пометив все новые сообщения как недавние, чтобы я мог сделать что-то вроде:
doveadm expunge -A OLD SEEN BEFORE 7d MAILBOX Trash
doveadm flags -A remove '\Recent' SEEN BEFORE 7d MAILBOX Trash
Удаляя перед удаление \Recent
флаг, это означает, что любые сообщения, которые видны прямо в дату отключения, получат дополнительный день или около того, прежде чем они будут фактически удалены. Проблема в том, что я не могу найти ничего, что действительно описывает, как установить \Recent
во всех новых сообщениях (и sieve
не могу этого сделать).
Что мне интересно: есть ли способ контролировать, когда \Recent
настроен так, чтобы я действительно мог заставить вышеуказанное работать, а если нет, есть ли другие средства достижения той же цели?
Решение, к которому я пришел, - это добавить настраиваемый флаг к сообщениям, которые собираются удалить. Я делаю это в своем ночном скрипте так:
#!/bin/bash
# Save unread messages from their impending doom
doveadm flags remove -A 'Doomed' UNSEEN KEYWORD 'Doomed'
# Soft-delete messages that were doomed by the previous pass
doveadm flags add -A '\Deleted' KEYWORD 'Doomed' SEEN
# Doom messages older than a week. In reality this will probably be
# several commands tailored to different users and/or mailboxes
doveadm flags add -A 'Doomed' SEEN SAVEDBEFORE 7d
# Purge all messages that were expunged by the previous pass
doveadm purge -A
# Expunge all messages that were deleted in this pass
doveadm expunge -A DELETED MAILBOX '*'
По сути, это устанавливает многоэтапное удаление, состоящее из двух этапов для большинства почтовых ящиков, с тремя этапами для mdbox
почтовые ящики на базе:
Doomed
. (1)Doomed
иметь \Deleted
флаг добавлен. (2)mdbox
Хранилище. (3)Если скрипт запускается каждые 24 часа, то это дает минимальную 24-часовую задержку между чтением сообщения (помеченным Doomed
), и он фактически удаляется. В mdbox
после этого сообщение полностью исчезнет через 24 часа.
Doomed
скорее всего, будет включать больше отдельных команд для поведения каждого пользователя и каждого почтового ящика, и им должны предшествовать какие-либо действия по архивированию. Например, в моем случае я перемещаю старые сообщения из защищенных почтовых ящиков в архивный почтовый ящик, который не подлежит удалению (и перемещается в сжатое хранилище с помощью alt-move).mdbox
(хотя ИМО все должны), затем шаг добавления \Deleted
флаг можно заменить на expunge
, и в этом случае можно отбросить последние две команды.mdbox
на основе счетов purge
команда не работает.