Резервное копирование почты

Стоит задача с облачного сервера сделать выгрузку писем по IMAP.

Что попробовал?

В поисках решения для резервного копирования почты по IMAP я попробовал два программных продукта. Первый это Handy Backup, второй это AOIME Backup.

В Handy мне не понравилось, что программа просто зависла и висела до тех пор, пока я ее не перезапустил принудительно. В ТП обращаться не стал.

AOIME Backup делал копии замечательно, но очень быстро инкрементные копии забили весь диск, при этом не пропорционально размеру почты. И ровно так же, как Handy в какой-то момент просто зависло на стадии «Выполнение 20%» и все, только перезагрузка ВМ помогла. Сильно много времени этому вопросу я не захотел уделять. Разово снять копию — ок, а вот на постоянной основное сомнительно.

MailStore Home решение понравилось, но платную версию не купить. А без нее только ручной режим и пара ящиков.

Еще посмотрел решение, которое описано вот этой записи https://cdnnow.ru/blog/offlineimap/, но меня оттолкнуло то, что offlineimap давно не обновлялся.

Поэтому выбор пал на imap-backup. О нем и рассказываю.

Настройка imap-backup

Страница на github https://github.com/joeyates/imap-backup.

В этом примере установка на Ubuntu 24.

Для начала установим менеджер пакетов для языка Ruby.

Далее установим сам imap-backup.

В этом примере я все буду сохранять в директорию /opt/.

Создание списка ящиков.
Создаем файл /opt/imap-backup.json.

С содержимом:

В этом файле всё просто, но я поясню:

  • username — email ящик;
  • password — пароль от ящика;
  • server — imap сервер email ящика;
  • local_path — путь, куда сохранять бекап;

Выдаем права на чтение этого файла.

И выдадим права на папку с бекапами ящиков. Этот шаг необходим для раздела «Вернуть выборочные письма из бекапа на ящик»

Далее сделаем скрипт для автозапуска.

С содержимом

Переменные, которые необходимо заменить:

  1. TELEGRAM_TOKEN — токен бота, которые выдает @BotFather;
  2. CHAT_ID — ID пользователя телеграм, которому отправлять уведомления, узнать его можно через бота @my_id_bot;

Примеры уведомлений в телеграм:

Делаем файл исполняемым

Далее можно запустить скрипт для проверки конфига и его работы.

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

Проверяем, что задание в cron.

Ожидаемый вывод.

Процедура восстановления

Резервная копия есть, уведомления об ошибках есть — это хорошо. Но что делать в случае, если необходимо восстановить письма или письмо?

Вернуть всю почту из бекапа на ящик

Для полного восстановления содержимого из бекапа на исходный сервер мы воспользуемся командой (описание на github).

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

После этого запустить команду restore. Например, вот так.

Данная команда  отправляет резервные копии электронных писем на сервер IMAP. При возникновении конфликтов папки переименовываются.

Письма не задублируются, т.к. восстанавливаются по папке + индификатору. Существующее письма на исходном сервере пропускаются.

Вернуть выборочные письма из бекапа на ящик

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

С помощью sshfs-win-manager подключим наш диск с бекапами к Windows-машине.

Пример параметров подключения.

Выглядит содержимое каталога вот так.

Далее нам потребуется почтовый клиент Thunderbird.net и внутри него плагин ImportExportTools NG.

Открываем локальные папки и подключаем необходимую mbox файл или монтируем целиком. От выбора зависит скорость обработки. Плагин импортирует в локальную папку содержимое файла (ов).

 

Например, я хочу посмотреть папку «Банки Тинькофф».

Выбираем нужную mbox папку.

Дожидаемся обработки. Она внизу слева.И наша папка появляется в почтовике.

Находим нужное письмо и экспортируем его в любом удобном формате. Отдаем пользователю. Можно ящик подключить по imap и это письмо вернуть на исходное место.

Минусы данного решения

Основной минус данного решения это его мониторинг. Да, у нас есть уведомления, но уведомления != мониторинг.

Второй минус это ручное управление ящиками. Через консоль. Не могу сказать, что это прям существенный минус, но некоторые неудобства есть. Особенно, если ящик много и есть текучка. Решение больше рассчитано на копирование каких-то важных ящиков.

Третий минус это неудобный способ возвращения писем на ящик.

Четвертый минус. Ящики будут раздуваться. Т.к. у нас не удаляется из бекапа то, что удалилось на исходном сервере. Оно, в принципе, и логично.


Если мой материал был полезен, то можете угостить меня кофе ☕️


Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Приглашение в телеграм! 💙


Приглашаю подписаться в Telegram
У меня там новости, маленькие рассказы и полезные ссылки.
Плюс так мы никогда не потеряемся!

👉 https://t.me/bitebyteru  👈

Он будет закрыт в 6 секунд