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

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

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

Настройка сжатия электронных писем состоит из двух этапов:

  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

Ежедневный cronjob

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

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

В /etc/cron.daily/ создать файл, назовем его 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 месяцев), изменять их соответствующим образом

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

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

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

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

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

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