Перенос почты с mbox на maildir(sendmail+dovecot)
Встал вопрос миграции. Зачем? Использую я для почты и сайта VDS, он маленький, памяти мало. Почты много. Периодически возникает такая проблема: я долго не проверял почту с одного из компьютеров, и начинаю её качать (за пару дней может быть до 20 мегабайт почты). В то время, пока я качаю почту, новые сообщения в mbox не кладутся, и процессы mail.local висят в памяти, ждут своего часа. Периодически они забивают всю память и становится плохо. Вот чтобы этого не было, я решил использовать maildir.
С чего начать. Начать надо с того, что sendmail не умеет работать с maildir форматом. Но зато с ним умеет работать procmail. Соответственно ставим procmail
make -C /usr/ports/mail/procmail install clean
В конфиг sendmail дописываем где-нибудь в начале
FEATURE(local_procmail)
и в конце
MAILER(procmail)
При этом MAILER(local) нужно закомментировать: dnl MAILER(local) и, разумеется пересобрать конфиг
cd /etc/mail make make install make restart
Для директории maildir у меня уже отведены директории вида
/home/пользователь/data/email/домнен/ящик/
Собствено созданы виртуальные пользователи для каждого ящика с такой директорией, в качестве домашней. Для того, чтобы procmail складывал почту в нужное место, в глобальном конфиге procmail – /usr/local/etc/procmailrc пишем
MAILDIR=$HOME/.maildir DEFAULT=$MAILDIR/
Для отладки можно туда же запихать строку LOGFILE=/var/log/procmail.log. Главное не забыть потом этот лог отключить, либо периодически чистить.
UPDATED: Если по какой-либо причине, в maildir положить не получится, то procmail положит письмо в /var/mail/$USER. Чтобы он этого не делал, надо добавить в procmailrc опцию ORGMAIL=”"
С SMTP разобрались. Теперь POP3. Лезем в конфиг /usr/local/etc/dovecot.conf и ищем строку mail_location что-то там и меняем на
mail_location = maildir:%h/.maildir
Если нужно сохранить при этом почту, лежащую в ящике, то надо установить mb2md
make -C /usr/ports/mail/mb2md install clean
И запустить для нужных ящиков. У меня mbox`ы хранились в /var/mail/virtuser_номер
mb2md -s /var/mail/virtuser_N -d /home/юзер/data/email/домен/ящик/.maildir/
UPDATED: Если ящиков много, то можно выполнить 2 команды:
cat /usr/local/etc/dovecot.passwd | awk -F: '/virtuser/ {print "mb2md -s", $9, "-d", $6 "/.maildir"}' | sh
cat /usr/local/etc/dovecot.passwd | awk -F: '/virtuser/ {print "chown -R", $9, $6 "/.maildir"}' | sed "s/\/var\/mail\///g" | sh
После надо переделать файл dovecot.passwd
cd /usr/local/etc/
cat dovecot.passwd | \
awk -F\: '{ print $1":"$2":"$3":"$4"::"$6":::maildir:"$6"/.maildir" }' > dovecot.passwd.new
mv dovecot.passwd.new dovecot.passwd
И перезпаустить dovecot /usr/local/etc/rc.d/dovecot restart
И, собственно, всё. Почта теперь хранится не в mbox, а в maildir формате.


