На практике мне приходилось несколько раз сталкиваться с DBMail.
Скажу честно, я стараюсь избегать использовать SQL лишний раз, особенно
для почты, особенно для хранения писем. Самым правильным методом
хранения писем я считаю Maildir. Но! бывают ситуации, когда заказчика
просто нет возможности переубедить, а поскольку кушать хочется,
приходится делать то, что нужно заказчику.
Вот на этот случай я и пишу статью о DBMail.
DBMail присутствует в портах FreeBSD, оттуда мы его и поставим:
cd/usr/ports/mail/dbmail makeinstall clean
Ну и вначале, ставший практически для всех портов традиционный диалог настройки опций сборки:
Options for dbmail 2.2.11
[X] MYSQL Build with MySQL support [] POSTGRESQL Build with PostgreSQL support [] SQLITE Build with SQLite support
[] SIEVE Build w. support for Sieve mail sorting language [] LDAP Build with support for
LDAP authentication
[ OK ] Cancel
После того, как DBMail соберется и установится, нужно создать базу и
таблицы. Для этого сначала подключимся к MySQL и создадим базу и
пользователя, который будет подключатся к этой базе.
mysql -uroot -p CREATEDATABASE dbmail; GRANTALLON dbmail.*TO'dbmail'@'localhost'IDENTIFIEDBY'dbmail-123';
И теперь создадим таблицы:
mysql -uroot-p dbmail </usr/local/share/dbmail/mysql/create_tables.mysql
Теперь можно переходить к настройке DBMail.
Файл настроек /usr/local/etc/dbmail.conf имеет такой вид:
[DBMAIL] #Будем использовать mysql driver = mysql #Авторизовать пользователей через sql authdriver = sql #Параметры подключения к MySQL host = localhost sqlport = 3306 sqlsocket = /tmp/mysql.sock user = dbmail pass = dbmail-123 db = dbmail table_prefix = dbmail_ encoding = utf8 default_msg_encoding = utf8 #Email постмастера, сюда будут сыпаться уведомления postmaster = postmaster@hilik.org.ua sendmail = /usr/sbin/sendmail #Уровень логирования TRACE_SYSLOG = 3 TRACE_STDERR = 1 #Работать DBMail будет от nobody EFFECTIVE_USER = nobody EFFECTIVE_GROUP = nogroup #Соединения принимать на всех интерфейсах BINDIP = * #Количество одновременных процессов DBMail NCHILDREN = 2 MAXCHILDREN = 10 MINSPARECHILDREN = 2 MAXSPARECHILDREN = 4 #Максимальное число соединений MAXCONNECTS = 10000 #Максимальное число ошибок соединения MAX_ERRORS
= 500 #Глобальный таймаут. Применяется ко всем параметрам #отвечающих за ожидание, если они не были отдельно переопределены TIMEOUT = 300 #Переопределенный timeout для процедуры Login login_timeout = 60 #Для ускорения работы отключаем преобразование ip адресов в имена RESOLVE_IP = no #Логи logfile = /var/log/dbmail.log errorlog = /var/log/dbmail.err #Директории для pid файла pid_directory = /var/run state_directory = /var/run #Настройки таймаутов query_time_info = 10 query_time_message = 20 query_time_warning = 30
#Настройки протоколов [SMTP]
#По LMTP smtp сервера будут отдавать почту DBMailу [LMTP] PORT = 24
#POP3 и IMAP - протоколы по которым клиенты забирают почту. [POP] PORT = 110 POP_BEFORE_SMTP = no
[IMAP] PORT = 143 TIMEOUT = 4000 IMAP_BEFORE_SMTP = no
# end of configuration file
Теперь разрешим запускаться dbmail-imap, dbmail-pop3d и dbmail-lmtp: