The Jerusalem PostIsrael Police arrest Kfar Saba mayor, wife, and 15 others in major municipal corruption probePunchEXPLAINER: Who is Geoff Ogunlesi and why is he trending?RTP DesportoCiclista português Ivo Oliveira conquista Tour de KyushuBollywood HungamaAanand L Rai-backed Nakhrewaalii set to release on October 30, 2026InquirerArticle II’s essence: Sara plays simple but numbers won’t lie — DioknoThe South AfricanWhat’s next for Orlando Pirates after losing MTN8 trophy to Sundowns?ZDF heuteEntdecken Sie das ZDF-NachrichtenstudioCBS NewsSaudi airport stays shut as Houthi attacks kill 20 people in a weekDaily MailWhat to eat to prevent bowel cancer: The science-backed breakfasts, lunches and dinners that help reduce your risk... and the foods to avoidDeadline‘FREEAgent:’ Streetwear Pioneer Jeff Staple Among First Guests On Season Two Of Kenny Annan-Jonathan’s PodcastGolem.deAngriffe auf russische Raffinerien: USA drohen Ukraine mit Stopp von Geheimdienstinfos20 MinutenRaketen gegen Polizisten – und was tut die Politik?
The Daily Newsstand · Free, Always
Monday, October 12, 2026

Бекап Яндекс 360 в обычную папку: почта, Диск, контакты и календарь

Translate

Думаю, не надо объяснять, зачем эта программа, в связи с недавней обстановкой. Почта компании лежит у одного провайдера, и своей копии этих данных у большинства нет. Мне нужна была такая копия: полная, на моём диске и в формате, который откроется без Яндекса и без моей программы.

Готового инструмента под эту задачу я не нашёл, поэтому сделал свой. Называется MailBackup, работает под Windows, бесплатный. Ниже расскажу, что он умеет, как устроен и где у него слабые места.

Что нужно было получить

Требования я сформулировал так:

  1. Сохранять все четыре вида данных: письма, файлы Диска, контакты, календарь.

  2. Работать со списком ящиков. Загрузил файл с адресами и паролями, нажал кнопку, ушёл.

  3. Переживать обрывы. Первый бекап большого ящика идёт часами, и за это время обязательно что‑нибудь отвалится. После перезапуска программа должна продолжить, а не начать сначала и не наплодить дублей.

  4. Хранить архив в открытом виде, чтобы его можно было залить в другой почтовый сервер.

Почему не один rclone

Первая мысль была взять rclone и не писать ничего. Для файлов это и правда лучший вариант: Диск отдаётся по WebDAV, rclone умеет его синхронизировать и делает это надёжно.

Но почту rclone не забирает вообще. Письма доступны по IMAP, контакты по CardDAV, календарь по CalDAV. Это три разных протокола, и для каждого нужен свой загрузчик. В итоге получилось так:

Данные

Протокол

Чем забирается

Что лежит в архиве

Письма

IMAP

свой загрузчик на MailKit

.eml по папкам ящика

Файлы Диска

WebDAV

rclone

файлы как есть

Контакты

CardDAV

свой загрузчик

.vcf, по файлу на контакт

Календарь

CalDAV

свой загрузчик

.ics, по файлу на событие

rclone идёт в комплекте, отдельно его ставить не надо.

Пароли приложений

Яндекс не пускает сторонние программы по обычному паролю. Нужен пароль приложения, причём на каждый вид данных свой: «Почта», «Файлы», «Контакты», «Календарь». Пароль от почты к Диску не подойдёт.

На этом я споткнулся в первой версии, где у ящика был один пароль. Пришлось переделать: теперь у ящика до четырёх паролей, и программа сохраняет только те части, для которых пароль задан. Не нужен Диск, значит, пароль «Файлы» просто не создаёте.

Список ящиков загружается из CSV:

адрес;пароль почты;пароль файлов;пароль контактов;пароль календаря
ivanov@company.ru;abcdabcdabcdabcd;efghefghefghefgh;ijklijklijklijkl;mnopmnopmnopmnop
petrov@company.ru;qwerqwerqwerqwer;;;

После импорта пароли шифруются через Windows DPAPI и привязываются к учётной записи Windows. Исходный файл можно и нужно удалить.

Как устроена докачка

Это была главная часть задачи, поэтому подробнее.

У каждого письма в папке IMAP есть номер (UID), который не меняется. Программа ведёт базу SQLite, где записано, какие UID каждой папки уже лежат в архиве. При запуске она запрашивает у сервера список UID, сравнивает с базой и скачивает только разницу.

Письмо сначала пишется во временный файл, потом переименовывается. Запись в базе появляется только после этого. Если процесс убили посреди скачивания, в архиве не остаётся обрезанных писем, а в базе нет записей о файлах, которых не существует. Следующий запуск просто скачает это письмо заново.

Для контактов и событий работает тот же принцип, только вместо UID сравниваются метки версий (ETag), которые отдаёт сервер. Изменилось событие, скачивается заново. Не изменилось, пропускается. Файлы сверяет сам rclone.

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

Восстановление

Бекап, из которого нельзя восстановиться, ничего не стоит, поэтому обратная дорога тоже есть. Письма загружаются по IMAP с папками, отметками о прочтении и датами, файлы по WebDAV, контакты и события по CardDAV и CalDAV.

Восстанавливать можно в тот же ящик, в другой ящик Яндекса или на любой сервер с этими протоколами. Последнее и было целью пункта про открытый формат: архив не привязан к Яндексу.

На сервере назначения ничего не удаляется и не перезаписывается. Повторный запуск не создаёт дублей: программа помнит, что уже загружено.

Есть массовый режим: список «откуда, куда, пароли» в CSV, и ящики восстанавливаются параллельно.

Что ещё есть

Расписание. Создаётся задача в Планировщике Windows: каждый день, по дням недели, раз в месяц или каждые несколько часов. Можно запускать и без входа пользователя в систему, это нужно для серверов.

Уведомления. Письмо после бекапа или только при ошибках. Отдельно приходит письмо, если бекап вообще не смог стартовать, например пропала сетевая папка. Тишина в почте не должна означать, что всё хорошо.

Хранение. По умолчанию из архива ничего не удаляется: письмо, стёртое в ящике, в архиве остаётся. Можно включить снимки на дату. Они делаются жёсткими ссылками, так что десять снимков не занимают десять объёмов архива.

Проверка архива. При скачивании у каждого письма считается SHA-256. Отдельная команда перечитывает архив и сверяет суммы. Битый сектор или случайно удалённая папка находятся сразу, а не в день, когда архив понадобился.

Проверка архива

Проверка архива

История. По каждому запуску видно, что сделано по каждому ящику и каждой службе.

История запусков

История запусков

Консоль. Вместе с окном ставится mailbackup-cli.exe, все операции доступны из командной строки.

Чего программа не умеет

Список честный, чтобы не было сюрпризов.

  • Правила обработки писем, подписи и настройки ящика не сохраняются. Через IMAP их не достать.

  • Контрольные суммы считаются только для писем. Файлы Диска копирует rclone, и своей проверки по ним нет.

  • Пароли привязаны к пользователю Windows. Перенесли программу на другой компьютер, вводите пароли заново. Архив при этом переносится свободно.

  • Установочник не подписан. Windows покажет предупреждение о неизвестном издателе.

  • Только Windows.

Из чего сделано

C# и.NET 8, окно на WPF, почта через MailKit, состояние в SQLite, файлы через rclone, установщик на WiX.

Где взять

Установочник и инструкция: github.com/sergheevmddev/MailBackup

Буду рад замечаниям и сообщениям об ошибках, особенно от тех, у кого ящиков много. Пишите в Issues на GitHub или в комментарии.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.