Назад | Перейти на главную страницу

Самые безопасные способы удаления старых сообщений в Dovecot

Итак, я пытаюсь настроить автоматическое удаление сообщений в 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 часа.

  1. Маркировка сообщений как Doomed скорее всего, будет включать больше отдельных команд для поведения каждого пользователя и каждого почтового ящика, и им должны предшествовать какие-либо действия по архивированию. Например, в моем случае я перемещаю старые сообщения из защищенных почтовых ящиков в архивный почтовый ящик, который не подлежит удалению (и перемещается в сжатое хранилище с помощью alt-move).
  2. Если вы не используете mdbox (хотя ИМО все должны), затем шаг добавления \Deleted флаг можно заменить на expunge, и в этом случае можно отбросить последние две команды.
  3. В установках без mdbox на основе счетов purge команда не работает.