После сбоя у меня осталось по 2 почтовых ящика для каждого из моих пользователей на отдельных машинах. Я выключил временную машину и поместил почтовые ящики на настоящий сервер в /srv/scratch/$username/Maildir/...
, и необходимость интегрировать сообщения от них, в идеале с сохранением состояния чтения / просмотра, в канонические почтовые ящики пользователей, /srv/mail/$username/Maildir/...
. У меня нет предпочтений относительно того, находится ли это в виде подпапки или в их основном почтовом ящике, однако я уверен, что ни один из временных почтовых ящиков не содержит самих подпапок. (Если они это сделают, еще больше обманите пользователей, которым было прямо сказано не делать этого во временных учетных записях!)
Есть ли хороший способ сделать это, минимизирующий риск потери почты и означающий, что их клиенты автоматически выбирают новую папку / сообщения (в зависимости от того, что они должны быть) при повторном подключении? В качестве альтернативы, что мне нужно сделать, чтобы сообщить Dovecot о новых сообщениях после их сброса в Maildirs?
Оба сервера были построены с использованием Exim4 для доставки и Dovecot для IMAP.
Я бы написал сценарий для перемещения файлов на место, используя почти спецификацию доставки Maildir, которая включает использование tmp / dir с последующим переименованием в новый / dir, но для этого вы бы переименовали в cur / или new / dir, в зависимости от где был исходный файл.
Учитывая, что имена файлов содержат временные метки, у вас должно быть очень мало (нулевых) коллизий, но паранойя - это хорошо. Запишите файл в tmp /; если это cur / file, сохраните суффикс состояния вне имени файла; независимо от того, переходите ли к new / или cur /, проверьте наличие того же имени в new / или того же префикса в cur /; затем переименуйте соответствующим образом.
Будьте осторожны, чтобы не потерять суффикс cur / -in-tmp / из-за сбоя памяти; журнал всех предпринятых действий поможет вам восстановить, если что-то пойдет не так.