Теперь база данных готова к заполнению данными и дальнейшей обработке. Поскольку в роли почтового сервера у нас выступает Postfix, объяснить ему как получать инфу из БД. Начнем с "объяснения" какие у нас есть виртуальные домены.
Создаем конфиг /etc/postfix/mysql-virtual_domains.cf такого содержания:
user = mail_adminpassword = mailadminpasshosts = 127.0.0.1dbname = mailquery = SELECT 1 FROM domains WHERE domain='%s' Итак, представим, что Postfix получил письмо для somebody@example.com, и теперь должен проверить: example.com - наш ли это виртуальный домен. Для это ему необходимо выполнить SQL запрос (query в нашем конфиге) и заменить %s на example.com. Если найдет там такой - вернет 1. Вообщем-то неважно что он вернет, главное что б вернул хоть какой-нибудь результат, а не null
Укажем Postfix`у где лежит этот конфиг:
#> postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual_domains.cf Команда postconf - e по сути просто добавляет в /etc/postfix/main.cf строку. Плюс добавление доп. параметров в конфиг postfx`а таким способом происходит интерактивно, т.е. изменения вступают в силу сразу, без перезагрузки postfix.
Заполним таблицу domains. Цепляемся к консоли MySQL, к БД mail:
#> mysql -p mailИ выполним запрос:
mysql> INSERT INTO domains (domain) VALUES ('example.com');exit Возвращаемся в наш shell и проверяем, знает ли postfix наш виртуальный домен exemple.com:
#> postmap -q example.com mysql:/etc/postfix/mysql-virtual_domains.cf Если вернулась 1 - значит все гуд! Ежели есть ошибки - проверяй конфиг
/etc/postfix/mysql-virtual_domains.cf . Косяки с именем юзера, паролем или еменем БД, либо еще можно проверить на предмет привилегий, а лучше дать их еще раз (см. выше)
Теперь научим Postfix понимать, где у нас в БД хранятся юзверя, ну и соответственно их email`ы. Создаем под это дело конфиг /etc/postfix/mysql-virtual_mailboxes.cf такого содержания:
user = mail_adminpassword = mailadminpasshosts = 127.0.0.1dbname = mailquery = SELECT 1 FROM users WHERE email = '%s'
user = mail_adminpassword = mailadminpasshosts = 127.0.0.1dbname = mailquery = SELECT 1 FROM users WHERE email = '%s' Укажем Postfix`у где лежит этот конфиг:
#>postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual_mailboxes.cf Заполним таблицу users. Цепляемся к консоли MySQL, к БД mail:
#> mysql -p mailи выполним запрос:
mysql> INSERT INTO users (email, password) VALUES ('john@example.com', 'jhon'));exit
Возвращаемся в наш shell и проверяем, знает ли postfix нашего вновь созданного юзверя:
#>postmap -q john@example.com mysql:/etc/postfix/mysql-virtual_mailboxes.cf Важный момент! Директория хранения писем пользователя будет такой: var/vmail/$DOMAIN/$USER
Теперь перейдем к организации "форвардинга".
Теперь перейдем к организации "форвардинга".
Заполним таблицу forwardings. Цепляемся к консоли MySQL, к БД mail:
и выполним запрос:
#> mysql -p mailи выполним запрос:
mysql> INSERT INTO forwardings (source, destination) VALUES ('john@example.com', 'john@example.com'), ('john@example.com', 'devnull@workaround.org'); exitТеперь научим Postfix понимать, где у нас в БД хранится таблица forwardings. Создаем под это дело конфиг /etc/postfix/mysql-virtual_forwardings.cf такого содержания:
user = mail_adminpassword = mailadminpasshosts = 127.0.0.1dbname = mailquery = SELECT destination FROM forwardings WHERE source = ''%s'
Тестим:
user = mail_adminpassword = mailadminpasshosts = 127.0.0.1dbname = mailquery = SELECT destination FROM forwardings WHERE source = ''%s' Тестим:
#>postmap -q john@example.com mysql:/etc/postfix/mysql-virtual_forwardings.cf
Должны получить:
Должны получить:
john@example.com,devnull@workaround.orgУкажем Postfix`у где лежит этот конфиг:
#>postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual_forwardings.cf На этом организация связки Postfix - MySQL завершена. Можно двигаться дальше, не забыв при этом "навалить" пользователю postfix соответствующих правов на чтение его конфигов):
#> chgrp postfix /etc/postfix/mysql-*.cf#> chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
Комментариев нет:
Отправить комментарий