Настройки mysql для работы с postfixadmin
Материал из wiki.lissyara.su
Проверка, включена ли поддержка mysql:
[root@server /usr/local/etc/exim]# exim -bV | grep mysql Lookups: dbm dbmnz mysql
Рекомендую вынести всё касающееся mysql в отдельный файл:
/usr/local/etc/exim /000.mysql.conf
# Как подключаться к серверу MYSQL (сокет, база, логин, пароль) hide mysql_servers = (/tmp/mysql.sock)/eximbase/eximuser/eximpassword # Список доменов MYSQL_DOMAINS = SELECT domain FROM domain WHERE transport = 'virtual' AND active='1' # Перенаправления для доменов MYSQL_ALIASES_DOMAINS = SELECT goto FROM alias WHERE address='${quote_mysql:@$domain}' LIMIT 1 # Список алиасов MYSQL_ALIASES = SELECT goto FROM alias WHERE \ address='${quote_mysql:$local_part@$domain}' LIMIT 1 # Список пользователей MYSQL_USERS = SELECT username FROM mailbox WHERE \ username='${quote_mysql:$local_part@$domain}' LIMIT 1 # Список всех E-Mail адресов для рассылки по адресу vsem MYSQL_VSEM = SELECT username FROM mailbox
В основной конфигурации потребуется этот файл подключить:
Configure
# Настройки для mysql .include /usr/local/etc/exim/000.mysql.conf … … # Наши домены ( @ - домен нашего компьютера) domainlist local_domains = @ : ${sg{${lookup mysql{MYSQL_DOMAINS}}}{\n}{:}} … … Остальные настройки … …
Секцию роутеров можно сделать аналогично:
600.routers.conf
dnslookup: driver = dnslookup domains = ! +local_domains transport = remote_smtp ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 no_more # Все адреса user@mydomain2.ru или user@mydomain1.ru отправляем на user@mydomain.ru # все пользователи у нас в @mydomain.ru, чтобы постоянно алиасы не прописывать. # Если есть желание, можно отказаться от этого роутера в пользу rewrite. mysql_aliases_domains: driver = redirect domains = +local_domains allow_fail allow_defer condition = ${lookup mysql{MYSQL_ALIASES_DOMAINS}{yes}{no}} data = ${quote:$local_part}${lookup mysql{MYSQL_ALIASES_DOMAINS}} # Рассылка всем адресатам разрешена только для postmaster@mydomain.ru mysql_vsem: driver = redirect domains = +local_domains local_parts = vsem allow_fail allow_defer senders = postmaster@mydomain.ru data = ${lookup mysql{MYSQL_VSEM}} mysql_aliases: driver = redirect allow_fail allow_defer data = ${lookup mysql{MYSQL_ALIASES}} mysql_user: driver = accept condition = ${lookup mysql{MYSQL_USERS}{yes}{no}} transport = dovecot_delivery cannot_route_message = Unknown user
Конфигурация rewrite для внутридоменного перенаправления: Был один, стало 2 запроса в mysql:
# Нужно для перенаправления для доменов через rewrite, а не роутер (acl_m1 - это $domain) MYSQL_ALIASES_DOMAINS2 = SELECT address FROM alias WHERE address='${quote_mysql:@$acl_m1}' LIMIT 1 # Перенаправления для доменов MYSQL_ALIASES_DOMAINS = SELECT goto FROM alias WHERE address='${quote_mysql:@$acl_m1}' LIMIT 1 acl_check_rcpt: # rewrite работает в DATA и $domain там нет. (Хотя в первом варианте он работает :-() warn set acl_m1 = $domain begin rewrite "${if !eq{${lookup mysql{MYSQL_ALIASES_DOMAINS}}}{}{*${lookup mysql{MYSQL_ALIASES_DOMAINS2}}}fail}" \ "${quote:$local_part}${lookup mysql{MYSQL_ALIASES_DOMAINS}}" Eh Тут есть баги: exim -bt работать не будет, т.к. переменная acl_m1 у него пустая. Testing dikens3@birnn.ru search_open: mysql "NULL" search_find: file="NULL" key="SELECT goto FROM alias WHERE address='@' LIMIT 1" partial=-1 affix=NULL starflags=0 и: echo "Привет" | mail -s "Тема" user@mydomain.ru работать не будет для доменов-алиасов. Может есть ещё какие баги, я в продакшен это не пускал. Выкладываю только потому, что я полдня убил на рабочую конструкцию rewrite, а также для демонстрации возможностей rewrite в exim.