DBMail. Почтовый сервер c MySQL хранилищем писем.
На практике мне приходилось несколько раз сталкиваться с DBMail. Скажу честно, я стараюсь избегать использовать SQL лишний раз, особенно для почты, особенно для хранения писем. Самым правильным методом хранения писем я считаю Maildir. Но! бывают ситуации, когда заказчика просто нет возможности переубедить, а поскольку кушать хочется, приходится делать то, что нужно заказчику.
Вот на этот случай я и пишу статью о DBMail.
DBMail присутствует в портах FreeBSD, оттуда мы его и поставим:
cd /usr/ports/mail/dbmail make install 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 CREATE DATABASE dbmail; GRANT ALL ON dbmail.* TO 'dbmail'@'localhost' IDENTIFIED BY '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:
echo 'dbmail_imapd_enable="YES"' >> /etc/rc.conf echo 'dbmail_pop3d_enable="YES"' >> /etc/rc.conf echo 'dbmail_lmtpd_enable="YES"' >> /etc/rc.conf
И соответственно запустим.
/usr/local/etc/rc.d/dbmail-imapd start /usr/local/etc/rc.d/dbmail-pop3d start /usr/local/etc/rc.d/dbmail-lmtpd start
И теперь перейдем к добавлению пользователей.
Добавляются пользователи так:
dbmail-users -a sh@hilik.org.ua -w cthutq-123
и увидим такой ответ:
Adding INBOX for new user... ok. Done sh@hilik.org.ua:x:4:0:0.00:0.00:
Добавить еще один адрес к почтовому ящику, ну то есть сделать alias, можно командой:
dbmail-users -c sh@hilik.org.ua -s hilik@hilik.org.ua
То есть, к почтовому ящику sh@hilik.org.ua, добавляем алиас hilik@hilik.org.ua.
На этом настройка самого DBMail закончена. Осталось прикрутить его к почтовому серверу Exim или Postfix.
Подключаем DBMail к Exim.
Подключаем DBMail к Postfix
Комментарии (3)
Other Links to this Post
RSS-лента комментариев к этой записи. TrackBack URI



By Inviseble_Demon, 23.11.2009 @ 01:25
# cat /etc/redhat-release
CentOS release 5.4 (Final)
Пришлось компилировать вручную ))
Собрал поставил настроил (вроде)
Делал связку с sendmail
Но так и не могу заставить подключиться к базе ((
# dbmail-users -a mail@inviseble-demon.ru -w 123
Opening connection to database…
Failed. Could not connect to database (check log)
Command failed.
И хоть лопни…
Пользователь создан, пробывал через myphpadmin – все робит
Я даже под рутом пробывал :D
В чем может быть трабла !?
# $Id: dbmail.conf 1539 2004-12-27 21:41:07Z paul $
# (c) 2000-2002 IC&S, The Netherlands
#
# Configuration file for DBMAIL
# This configuration file needs to be run through dbmail-config to be effective
# after that, changes are effective inmediatly
/etc/dbmail.conf (может файл не тот ? O_o)
[DBMAIL]
# Database settings
host=localhost # host for database, set to localhost if database is om
# the same host as dbmail and you want to use a local socket
# for connecting.
sqlport=3306 # if you want to use TCP/IP for connecting to the database,
# and have the database running on a non-standard port.
sqlsocket=/var/lib/mysql/mysql.sock # when using a local socket connection to the database, fill
# in the path to the socket here (e.g. /var/run/mysql.sock)
user=dbmail # user to connect as to database
pass=dbmail-123 # password for user to database
db=dbmail # name of database
POSTMASTER=postmaster # postmaster’s email address.
# trace level for dbmail-util
TRACE_LEVEL=2
[SMTP]
SENDMAIL=/usr/sbin/sendmail # sendmail executable for forwarding mail
AUTO_NOTIFY=no
AUTO_REPLY=no
TRACE_LEVEL=2
[LMTP]
EFFECTIVE_USER=nobody # the user that dbmail-lmtpd will run as (need to be root to bind to a port<1024)
EFFECTIVE_GROUP=nogroup # the group that dbmail-lmtpd will run as
BINDIP=* # the ipaddress the dbmail-lmtpd server has to bind
# to, * for all adresses. Use 127.0.0.1 to only
# bind to localhost.
PORT=24 # the port number the dbmail-lmtpd server has to bind to.
NCHILDREN=20 # default number of LMTP handlers (each is a process)
MAXCHILDREN=10 # max. number of LMTP handlers
MINSPARECHILDREN=2
MAXSPARECHILDREN=4
MAXCONNECTS=10000 # the maximum number of connections a default childs makes
TIMEOUT=300 # the time (s) before the dbmail-lmtpd should shutdown a connection which is being idle.
RESOLVE_IP=yes # if yes, the lmtp daemon resolves IP numbers to DNS names in the log
TRACE_LEVEL=2
MAX_ERRORS=500
[POP]
EFFECTIVE_USER=dbmail # the user that dbmail-pop3d will run as (need to be root to bind to a port<1024)
EFFECTIVE_GROUP=mail # the group that dbmail-pop3d will run as
BINDIP=* # the ipaddress the dbmail-pop3d server has to bind to, * for all addresses
PORT=110 # the port number the dbmail-pop3d server has to bind to.
NCHILDREN=10 # default number of POP3 handlers (each is a process)
MAXCHILDREN=20 # mac. number of POP3 handlers
MINSPARECHILDREN=2
MAXSPARECHILDREN=4
MAXCONNECTS=100 # the maximum number of connections a default childs makes
TIMEOUT=300 # the time (s) before the dbmail-pop3d should shutdown a connection which is being idle.
RESOLVE_IP=yes # if yes, the pop daemon resolves IP numbers to DNS names in the log
POP_BEFORE_SMTP=no
TRACE_LEVEL=2
[IMAP]
EFFECTIVE_USER=nobody
EFFECTIVE_GROUP=nogroup
BINDIP=*
PORT=143
NCHILDREN=50
MAXCHILDREN=200 # mac. number of IMAPD handlers
MINSPARECHILDREN=2
MAXSPARECHILDREN=4
MAXCONNECTS=10000 # the maximum number of connections a default childs makes
TIMEOUT=4000 # the time (s) before the dbmail-imapd should shutdown a connection which is being idle.
RESOLVE_IP=yes # if yes, the imap daemon resolves IP numbers to DNS names in the log
IMAP_BEFORE_SMTP=no
TRACE_LEVEL=2
# end of configuration file
By hilik, 23.11.2009 @ 01:46
Попробуйте вместо localhost, 127.0.0.1 использовать. С этим бывают нюансы. И в гранте сожно попробовать 127.0.0.1 использовать grant all on dbmail.* to ‘dbmail’@’127.0.0.1′ identified by ‘dbmail-123′;
By Inviseble_Demon, 28.11.2009 @ 03:05
Проблема была в кодеровке базы :D Включил голи и там все «на русском»…
Сейчас делал связку… Dbmail + Postfix
maillog
Nov 28 02:56:20 inviseble-demon postfix/cleanup[15495]: fatal: unsupported dictionary type: mysql
Nov 28 02:56:21 inviseble-demon postfix/master[8081]: warning: process /usr/libexec/postfix/cleanup pid 15495 exit status 1
Nov 28 02:56:21 inviseble-demon postfix/master[8081]: warning: /usr/libexec/postfix/cleanup: bad command startup — throttling
Nov 28 02:56:24 inviseble-demon postfix/smtpd[15510]: fatal: unsupported dictionary type: mysql
Nov 28 02:56:25 inviseble-demon postfix/master[8081]: warning: process /usr/libexec/postfix/smtpd pid 15510 exit status 1
Nov 28 02:56:25 inviseble-demon postfix/master[8081]: warning: /usr/libexec/postfix/smtpd: bad command startup — throttling
Nov 28 02:57:19 inviseble-demon dbmail/pop3d[14212]: Message:[server] pool.c,manage_stop_children(+475): General stop requested. Killing children…
Nov 28 02:57:21 inviseble-demon postfix/cleanup[15772]: fatal: unsupported dictionary type: mysql
Nov 28 02:57:22 inviseble-demon postfix/master[8081]: warning: process /usr/libexec/postfix/cleanup pid 15772 exit status 1
Nov 28 02:57:22 inviseble-demon postfix/master[8081]: warning: /usr/libexec/postfix/cleanup: bad command startup — throttling
Nov 28 02:57:23 inviseble-demon dbmail/pop3d[15782]: Message:[server] pool.c,child_register(+299): register child [15782]
Nov 28 02:57:23 inviseble-demon dbmail/pop3d[15784]: Message:[server] pool.c,child_register(+299): register child [15784]
Nov 28 02:57:23 inviseble-demon dbmail/pop3d[15779]: Message:[server] pool.c,scoreboard_state(+590): Scoreboard state: children [2/10], spares [2 (2 - 4)]
Nov 28 02:57:25 inviseble-demon postfix/smtpd[15788]: fatal: unsupported dictionary type: mysql
Nov 28 02:57:26 inviseble-demon postfix/master[8081]: warning: process /usr/libexec/postfix/smtpd pid 15788 exit status 1
Nov 28 02:57:26 inviseble-demon postfix/master[8081]: warning: /usr/libexec/postfix/smtpd: bad command startup — throttling
Nov 28 02:57:27 inviseble-demon dbmail/imap4d[14093]: Message:[server] pool.c,manage_stop_children(+475): General stop requested. Killing children…
Nov 28 02:57:31 inviseble-demon dbmail/imap4d[15838]: Message:[server] pool.c,child_register(+299): register child [15838]
Nov 28 02:57:31 inviseble-demon dbmail/imap4d[15840]: Message:[server] pool.c,child_register(+299): register child [15840]
Nov 28 02:57:31 inviseble-demon dbmail/imap4d[15835]: Message:[server] pool.c,scoreboard_state(+590): Scoreboard state: children [2/10], spares [2 (2 - 4)]
Nov 28 02:57:38 inviseble-demon dbmail/lmtpd[9791]: Message:[server] pool.c,manage_stop_children(+475): General stop requested. Killing children…
Nov 28 02:57:42 inviseble-demon dbmail/lmtpd[15885]: Message:[server] pool.c,child_register(+299): register child [15885]
Nov 28 02:57:42 inviseble-demon dbmail/lmtpd[15887]: Message:[server] pool.c,child_register(+299): register child [15887]
Nov 28 02:57:42 inviseble-demon dbmail/lmtpd[15883]: Message:[server] pool.c,scoreboard_state(+590): Scoreboard state: children [2/10], spares [2 (2 - 4)]
Nov 28 02:58:22 inviseble-demon postfix/cleanup[16102]: fatal: unsupported dictionary type: mysql
Nov 28 02:58:23 inviseble-demon postfix/master[8081]: warning: process /usr/libexec/postfix/cleanup pid 16102 exit status 1
Nov 28 02:58:23 inviseble-demon postfix/master[8081]: warning: /usr/libexec/postfix/cleanup: bad command startup — throttling
Nov 28 02:58:26 inviseble-demon postfix/smtpd[16108]: fatal: unsupported dictionary type: mysql
Nov 28 02:58:27 inviseble-demon postfix/master[8081]: warning: process /usr/libexec/postfix/smtpd pid 16108 exit status 1
Nov 28 02:58:27 inviseble-demon postfix/master[8081]: warning: /usr/libexec/postfix/smtpd: bad command startup — throttling
Nov 28 02:59:23 inviseble-demon postfix/cleanup[17847]: fatal: unsupported dictionary type: mysql
Nov 28 02:59:24 inviseble-demon postfix/master[8081]: warning: process /usr/libexec/postfix/cleanup pid 17847 exit status 1
Nov 28 02:59:24 inviseble-demon postfix/master[8081]: warning: /usr/libexec/postfix/cleanup: bad command startup — throttling
Че ему надо !? опять что то с sql процес вылетает… Кароче как всегда – кадельбек ((