Сжимайте старые электронные письма с помощью dovecot

Как я могу настроить dovecot для сжатия / архивирования старых писем (например, 6 месяцев назад), когда пользователи все еще могут их читать, чтобы сэкономить драгоценное пространство на сервере?

1
задан 23 March 2020 в 15:00
1 ответ

Конфигурация сжатия электронной почты представляет собой двухэтапный процесс:

  1. Нам нужно настроить dovecot, чтобы иметь возможность для чтения сжатых писем
  2. Нам нужно настроить cronjob для сжатия писем

Конфигурация Dovecot

Создайте файл конфигурации для dovecot, чтобы включить плагин zlib

Файлы конфигурации Dovecot обычно находятся в / etc /dovecot/conf.d/

Вы можете создать в этом каталоге файл с именем 35-zlib.conf с этим содержимым

# Enable Zlib for imap
protocol imap {
  mail_plugins = $mail_plugins zlib
}
# Enable Zlib for pop3
protocol pop3 {
  mail_plugins = $mail_plugins zlib
}
# Increase memory allowed for imap as it costs more to read compressed files
service imap {
  vsz_limit = 1024MB
}

. Убедитесь, что ваша конфигурация верна с помощью doveconf -n , затем перезапустите dovecot, используя service dovecot restart

Daily cronjob

Затем нам нужно каждый день запускать сценарий для сжатия электронных писем старше 6 месяцев

Надеюсь, это можно сделать с помощью [подробный] команда поиска

В /etc/cron.daily/ создайте файл, назовем его [1 151675] archive-email

Напишите в нем этот скрипт

#!/bin/sh
find /var/qmail/mailnames -mtime +182 -type f -regex ".*\.$HOSTNAME,.*S=.*,[a-yA-Y]*" ! -name "*\.gz*" -exec cp -a "{}" /tmp/ \; -exec sh -c "basename \"{}\" | xargs -L1 -I[] gzip \"/tmp/[]\"" \; -exec sh -c "[ -f \"{}\" ] && (basename \"{}\" | xargs -L1 -I[] mv \"/tmp/[].gz\" \"{}Z\" && rm \"{}\") && echo \"{}\" >> /var/log/archived-emails.log || (basename \"{}\" | xargs -L1 -I[] rm \"/tmp/[]\")" \;

Не забудьте запустить chmod + x для созданного файла, чтобы он стал исполняемым

/ var / qmail / mailnames обычно является корневой папкой, в которой хранятся электронные письма, это может зависеть от вашей конфигурации

Модификатор -mtime +182 позволяет нам находить только файлы, созданные более чем 182 дней назад (в основном 6 месяцев), измените его соответствующим образом

с помощью -типа f -regex ". * \. $ HOSTNAME,. * S =. *, [a-yA-Y] *" , мы хотим найти только файлы электронной почты, в которых нет флага Z, которые обычно называются в этом формате 1505740244.M351559P24632.my.domain.com, S = 38204, W = 40910: 2, S Более подробная информация о формате maildir здесь

Наконец, мы копируем электронные письма для сжатия в каталог \ tmp , чтобы избежать конфликтов во время сжатия, мы запускаем команду gzip для файла и перемещаем их снова, если файл все еще существует в исходном местоположении, добавив в его имя флаг Z, чтобы указать, что они сжаты, чтобы мы не архивировали их снова и, наконец, удаляли исходный файл.

Этот процесс был реализован в соответствии с рекомендациями dovecot wiki , но утилита maildirlock имеет ошибку , начиная с версии 2, которая никогда не исправлялась,поэтому я не использую его, однако маловероятно, что это вызовет проблемы.

Мы также регистрируем все успешно заархивированные файлы в \ var \ log \ archived-emails.log

. Вы можете запустить команду в своем сначала терминал без exec, чтобы убедиться, что вы соответствуете правильным файлам

find / var / qmail / mailnames -mtime +182 -type f -regex ". * \. $ HOSTNAME,. * S =. *, [a-yA -Y] * "

1
ответ дан 30 March 2020 в 00:17

Теги

Похожие вопросы