Наткнулся на комментарий в статье Почта для домена в Telegram на Хабре:

Одна проблема — куда девать всё нажитое непосильным трудом, почтовый архив за 10 лет. Не сказать чтобы там было что-то важное, но чисто из ностальгических соображений.

Много думал и многое понял. И знаю ответ на этот вопрос. Он в конце статьи, а до него - немного теории про электронную почту и электронные письма. Надеюсь, написано нормальным, незаумным языком.

История электронной почты

В середине 20 века появились какие-никакие компьютеры и какие-никакие сети. А вот стандартизованного средства текстового общения не было. Может и было, но до нас не дошло. Надо было его изобрести, и изобрели именно электронную почту за ряд преимуществ:

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

У других средств связи такого комплекта нет. Если бы изобретать электронную почту пришлось именно вам, как бы вы это сделали? Давайте подумаем и заодно посмотрим, как разные нюансы сделаны в бумажной и электронной почте.

Конверты и текстовые файлы

В бумажной почте письма отправляются в конвертах с определенными стандартами. "На деревню дедушке" или каракули на салфетке адресату не дойдут.

В электронной почте каждое письмо - это один текстовый файл. Ни в коем случае не несколько файлов. Состоит он из заголовков и тела, разделенные пустой строкой. Заголовки должны подчиняться стандартам, иначе аналогично письмо до адресата не дойдет. В теле может быть что угодно текстовое, хоть даже закодированный файл в несколько мегабайт.

Почтампы и серверы

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

В электронной почте есть почтовые серверы. Для маленьких серверов на несколько сотен ящиков может быть адрес вида mail.example.com. Для больших серверов с миллионами пользователей они обычно разделены на pop.example.com, imap.example.com и smtp.example.com. Нужно это для масштабирования, чтобы отдельные кластеры выполняли разные задачи, один принимал почту и отправлял куда надо, а второй - складировал для пользователей и общался с этими самыми пользователями.

Кабинет и почтовый клиент

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

Почтовый клиент в принципе выполняет все эти функции для электронной почты и аналогия тут скорее с электронки на бумажную почту.

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

Хранение почты: mbox и maildir

Если бумажная почта хранится в стопках, коробках или папках, то для электронной есть папки и два более-менее стандартных способа. Каждое письмо - это простой текстовый файл, который при хранении не меняется.

Maildir устроен как просто папка с текстовыми файлами. С содержанием всё понятно: это само письмо. Название же файла должно быть уникальным, можно вставить туда дату или айди. А еще в название можно добавить флаги прочтения или пересылки, если нужны. Прочитал письмо - почтовый клиент переименовал файл, добавив нужную буковку. Еще может быть усложнение в виде трех папок: cur с письмами и new и tmp для недокачанных и еще каких-то там писем, но это ситуацию не меняет.

Mbox можно получить, если несколько писем просто складировать в один файл. Главное в этом случае, договориться, как письма будут разделены внутри файла. Это прописано в стандартах, стандартов несколько, но вроде в 2022 году с этим проблем нет. Индекс и флаги прочтения (если они нужны) в таком случае хранятся где-то вовне, в другом файле рядом.

Mbox более старый формат и более распространен, особенно для экспорта-импорта. Maildir поновее и чаще используется в работе серверов, но может и некоторыми программами. А еще каждый почтовый клиент может придумать свой формат хранения, законом не запрещено.

Протоколы почты: POP

Какой протокол лучше, POP или IMAP? Простой ответ: IMAP явно лучше, он новее и гораздо мощнее. И в нем можно сделать все что можно сделать с POP. Более сложный ответ: зависит от ситуации, иногда POP может быть предпочтительнее.

POP умеет примерно три вещи (может и больше, но я не в курсе):

  1. Получить список писем в одной папке с сервера. Это как список файлов, но там будут поля из самого письма: дата, кому, от кого, тема, размер.
  2. Скачать письмо.
  3. Удалить письмо.

Сценарии могут быть разными:

  • самый простой: скачать и удалить каждое из писем.
  • если у нас много места на сервере: скачать только новые письма, ничего не удалять.
  • хитрый: скачать новые письма, удалить письма старше, например, 14 дней. Недавние письма можно скачивать с нескольких компьютеров и иметь к ним доступ.

Протоколы почты: IMAP

IMAP гораздо сложнее и ориентирован на хранение почты на сервере. Тут есть и работа с несколькими папками, и поиск. Но суть та же: можно получить список писем, скачать сами письма-файла, удалять. А еще можно копировать и перемещать письма между папками и закачивать письма с компьютера на сервер.

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

Как сделать копию почты

Мы помним, что каждое письмо - это просто текстовый файл. И что у нас есть два основных формата: mbox и maildir. Наша цель - получить с сервера письма и сохранить их в одном из этих форматах. Потом с письмами в папках одного из этих форматов можно сделать что угодно, импортировать их в любой подходящий почтовый клиент.


Первый вариант: что предлагает почтовый сервис. Например, гугл предлагает скачать всё что можно по вашему аккаунту на странице https://takeout.google.com/. Включая файлы с Диска, контакты, документы, историю слежки за вами и почту. Почта будет в mbox + настройки в json. Лично я не пробовал, но выглядит интересно.


Второй вариант: POP. Но POP может скачать только из одной папки, он предназначен для работы с входящими. Надо чтобы сервис мог предоставить все данные через POP. Тот же Gmail вроде может, в настройках есть опция для этого.

Скачать можно через любой почтовый клиент. После выкачки почты себе вы сможете сохранить любые письма поодиночке или все сразу в отдельные файлы. В Mozilla Thunderbird это Ctrl+S. Экспорт не нашел, но он хранит сообщения в mbox, можно просто отыскать папку с профилем и там будут Входящие и другие папки в mbox.


Третий вариант и основной: IMAP.
Легко настроить, легко бэкапить, полезно в хозяйстве и помимо бэкапов.
На примере Thunderbird: добавляете аккаунт или несколько. Появляется доступ ко всем папкам на сервере. Заходите в любую папку, выделяете письма, Ctrl+S, выбираете куда сохранить. Это будет не какой-то специальный формат писем Thunderbird. Это будет тот самый текстовый формат писем, где есть заголовки и тело. Название файла при этом какой-то информации в себе не несет.

Точно так же можно скопировать несколько писем в "Локальные папки". Это папка на диске (путь к ней можно найти в настройках и даже поменять на свой), в ней будет несколько файлов-mbox. Также позже какие-то из файлов можно будет сохранить уже отсюда, если понадобится, аналогично схеме с POP.

А еще можно копировать письма из одного сервера IMAP в другой напрямую. Например, из яндекса в гугл и обратно. Выбираете файлы или папки, и переносите мышкой, они копируются/переносятся. После этого, если у вас одновременно сломаются все комьютеры с почтой и забанит гугл, все письма останутся на яндексе. Или наоборот.

При перетаскивании можно зажать Ctrl для копирования или Shift для перемещения.


Четвертый вариант: Через специальную утилиту, вроде fetchmail, getmail, offlineIMAP. Для линукса в самый раз, в конфиге устанавливаются настройки, адрес сервера, логин, куда и в каком формате сохранять. При подключении через POP будет доступна только одна папка, а через IMAP - все.

OfflineIMAP также может синхронизировать письма в обе стороны. Т.е. повторый запуск через некоторое время обновит локальную копию, удалив все удаленные на сервере письма и скачав недостающие. А еще, если вы что-то сделаете с локальными письмами (удалите или переместите в другие папки, добавите письма откуда-то еще), синхронизация сделает то же самое на сервере.

В начале июня 2022 года Gmail отключил работу с POP и IMAP по паролю, теперь только OAuth. Thunderbird и другие распространенные клиенты могут работать с OAuth. А вот getmail и подобные - не знаю. Я сделал переадресацию на другой сервер.

Восстановление из бэкапа

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

Файлы mbox как правило можно восстановить через импорт. Или работать напрямую с ними.