Теперь база данных готова к заполнению данными и дальнейшей обработке. Поскольку в роли почтового сервера у нас выступает Postfix, объяснить ему как получать инфу из БД. Начнем с "объяснения" какие у нас есть виртуальные домены.
Создаем конфиг /etc/postfix/mysql-virtual_domains.cf такого содержания:
user = mail_admin
password = mailadminpass
hosts = 127.0.0.1
dbname = mail
query = 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_admin
password = mailadminpass
hosts = 127.0.0.1
dbname = mail
query = SELECT 1 FROM users WHERE email = '%s'
user = mail_admin
password = mailadminpass
hosts = 127.0.0.1
dbname = mail
query = 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_admin
password = mailadminpass
hosts = 127.0.0.1
dbname = mail
query = SELECT destination FROM forwardings WHERE source = ''%s'
Тестим:
user = mail_admin
password = mailadminpass
hosts = 127.0.0.1
dbname = mail
query = 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
Комментариев нет:
Отправить комментарий