Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> HOWTO: dovecot и getmail - почтовый архив
leah
сообщение 4.04.2012 - 18:42

Постоялец форума
*****

Группа: Модератор
Сообщений: 967
Регистрация: 17.08.2004
Пользователь №: 4400


Добрый день, друзья.

Озадачился я тут созданием почтового архива фирмы на всякий пожарный случай, так как почта лежит в IMAP и к ней имеет доступ несколько человек, да и провайдер пару раз.
Навеяло потупчикгейтом и просто разросшимся IMAP на сервере у провайдера, а тут еще и у начальника оутглюк сбойнул и показал, только показал, что в общем ящике пустота!
В принципе была необходимость сделать архив только общего почтового ящика типа коллективной помойки, но можно распространить и на все ящики POP/IMAP.

Приступаем к формированию задачи:
1) ежедневный (ежечасный/ежеминутный/и т.д.) архив почтовых ящиков с удаленного IMAP/POP
2) удаление сообщений старше 1 месяца на удаленном сервере
3) раздача архива с внутреннего IMAP-сервера заинтересованным пользователям
4) раздача общего архива через публичную IMAP-папку, чтобы не плодить лишних аккаунтов

Приступаем к решению задачи:
1) почту будем забирать ]]>getmail]]>, сначала посмотрел на старый и добрый fechmail, но неасилил biggrin.gif А здесь и любимый python и куча вкусностей, которые рассмотрим ниже, и простота конфигурирования - просто прелесть!
2) почту будем хранить в формате Maildir - он быстрый, индексированный, все в отдельных файлах - просто прелесть!
3) почту будем отдавать по IMAP - ну люблю я его и для коллективной работы то что надо, да и public folders в наличии в протоколе - просто прелесть!
4) отдавать будем через IMAP-сервер ]]>Dovecot]]>, сначала хотел через старый и добрый courier imap все сделать, но неасилил второй раз biggrin.gif , а здесь и секурность и простота настройки... В общем, просто прелесть!

Поехали - Getmail!

Для установки достаточно скопировать архив ]]>http://pyropus.ca/software/getmail/old-ver...l-4.25.0.tar.gz]]>
Разархивировать и установить командой python setup.py install в разархивированном архиве.

Getmail умеет работать от любого пользователя в системе, так как в нашем случае все пользователи будут виртуальные, но создаем системного пользователя vmail

adduser --system vmail
addgroup --system vmail
adduser vmail vmail


Создаем каталог для почты (в моем случае /mnt/archive/vmail), этот каталог будет содержать почту для пользователей, архив ящиков и прочее разное.
Создаем почтовый ящик для архива по лользователей,
mkdir -p /mnt/archive/vmail/public-info/Mailbox
mkdir -p /mnt/archive/vmail/leah/Mailbox


Не забываем сделать на созданные каталоги права для vmail
chown vmail.vmail /mnt/archive/vmail -R

Теперь создаем в системе каталог для самого getmail, обычно он находится в каталоге пользователя и называется ~.getmailrc, но в нашем случае пользователи виртуальные, поэтому создадим его например в /root и назовем /root/getmailrc - тут будут лежать конфиги и логи работы!!!
В каталоге создаем файлы конфигурации для нашего пользователя и архива почты:
/root/getmailrc/info.conf - забираем почту для общего IMAP аккаунта
CODE
[options]
verbose = 1
read_all = false
delete_after = 0
delete = false
message_log = /root/getmail/log

[retriever]
type = SimpleIMAPRetriever
server = mail.xxx.ru
username = info@xxx.ru
password = yyyyy

[destination]
type = Maildir
user=vmail
path = /mnt/archive/vmail/public-info/Maildir/


/root/getmailrc/leah.conf - забираем почту для своего аккаунта

CODE
[options]
verbose = 1
read_all = false
delete_after = 0
delete = false
message_log = /root/getmail/log

[retriever]
type = SimpleIMAPRetriever
server = mail.xxx.ru
username = leah@xxx.ru
password = yyyyy

[destination]
type = Maildir
user=vmail
path = /mnt/archive/vmail/leah/Maildir/


Проверяем общий getmail -v --getmaildir /root/getmail --rcfile info.conf
Проверяем пользовательский getmail -v --getmaildir /root/getmail --rcfile leah.conf

Если все прошло успешно, то в наших каталогах Mailbox будет архив почт, а на экране будут строки типа...
getmail version 4.25.0
CODE
Copyright © 1998-2009 Charles Cazabon. Licensed under the GNU GPL version 2.
SimpleIMAPRetriever:info@xxx.ru@mail.xxx.ru:143:
msg 1429/1433 (5132 bytes) delivered
msg 1430/1433 (66312 bytes) delivered
msg 1431/1433 (1738 bytes) delivered
msg 1432/1433 (59329 bytes) delivered
msg 1433/1433 (95302 bytes) delivered
5 messages (227813 bytes) retrieved, 1428 skipped


Все получилось? Если нужно удалять сообщения с сервера после архивирования - ставим delete=true в конфиге, если нужно удалять сообщения с сервера старше 30 дней - ставим delete_after=30. Только ставьте что нибудь одно, delete=true имеет наивысший приоритет! Сообщения с сервера удаляются, архив пополняется.

Не забываем вставить наши строчки в crontab (getmail умеет и демоном рабоатть, но мы старой закалки!), -v опция при этом не нужна, у нас логи ведутся!
10 6 * * * root /usr/local/bin/getmail -v --getmaildir /root/getmail --rcfile info.conf
15 6 * * * root /usr/local/bin/getmail -v --getmaildir /root/getmail --rcfile leah.conf


Так... теперь нужно организовать доступ к архиву через стандартный мыло-клиент, у меня Mail в MacOSX, а у вас?

Летим - Dovecot!

Не будем снобами и поставим его из системы
apt-get install dovecot

Конфигурация находится обычно в /etc/dovecot/dovecot.conf

Отредактируем его (создадим новый!!!), добавив нашу публичную папку public-info (будет доступна всем пользователям нашего внутреннего IMAP), добавим виртуальных пользователей (пока только один).

CODE
# Remove pop3 things if you don't want them
protocols = imap imaps

# It's nice to have separate log files for Dovecot. You could do this
# by changing syslog configuration also, but this is easier.
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log

# Disable SSL for now.
ssl = no # v1.2+, for older versions use: ssl_disable = yes
disable_plaintext_auth = no

# We're using Maildir format
mail_location = maildir:~/Maildir

# When creating any namespaces, you must also have a private namespace:
namespace private {
# type = private
separator = /
prefix =
#location defaults to mail_location.
inbox = yes
}

namespace public {
#type = public
separator = /
prefix = Public/
location = maildir:/mnt/archive/vmail/public-info/Maildir
subscriptions = no
}

# If you're using POP3, you'll need this:
pop3_uidl_format = %08Xu%08Xv

# Authentication configuration:
auth_verbose = yes

first_valid_uid = 100

auth default {
mechanisms = plain
passdb passwd-file {
args = /etc/dovecot/passwd
}
userdb static {
args = uid=vmail gid=vmail home=/mnt/archive/vmail/%u
}
}


Особое внимание обращаем на секции namespace public и userdb static, сюда пишем пути до нашего общего маилбокса и до пользовательских маилбоксов.

Логины/пароли пользователей храним в открытом виде (для простоты) в файле /etc/dovecot/passwd в виде строк, где leah пользователь, 123456 - пароль, {PLAIN} - тип кодировки пароля.
leah:{PLAIN}123456


Перпезапускаем restart dovecot, смотрим ошибки... (быть такого не должно..)

Приехали!
Берем свой любимый мылер (у меня Mail в MacOSX, если кто не знает...), заводим дополнительный аккаунт на вновь созданный сервер IMAP и смотрим - у каждого пользователя помимо приватной папочки еще будет и общая папочка Public.

Вы не устали читать? А я закончил biggrin.gif Вопросы в студию.

Сообщение отредактировано leah - 6.04.2012 - 13:21
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 20.04.2024 - 16:19