Nobody about something

Перенос почты с mbox на maildir(sendmail+dovecot)

Написано 26 февраля 2009 в 0:00 - Рубрики: *nix

Встал вопрос миграции. Зачем? Использую я для почты и сайта 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 формате.

Оставить комментарий