Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Продолжаем работу с DBMail. Прикручиваем к Postfix.


Новые статьи на сайте:

 

Hilik     Настроим все

 http://www.hilik.org.ua/

 

DBMail. Прикручиваем к Postfix.

Помимо Exim, мне часто приходится работать с Postfix. В том числе приходилось использовать postfix в связке с DBMail. Про установку и настройку DBMAil я рассказывал в статье: DBMail. Почтовый сервер c MySQL хранилищем писем. Прикручивается DBMail к постфикс не на много сложней, чем к Exim. И так же как Exim, postfix должен поддерживать MySQL.

Далее все просто.
Используя имеющиеся данные, те которые мы использовали в статье
DBMail. Почтовый сервер c MySQL хранилищем писем.
В первую очередь впишем имя домена, для которого будем принимать почту. Для этого в файле /usr/local/etc/postfix/main.cf найдем строку:

mydestination = $myhostname, localhost.$mydomain, localhost

и добавим в конце домен hilik.org.ua:

mydestination = $myhostname, localhost.$mydomain, localhost, hilik.org.ua

Почту мы будем доставлять от постфикса к DBMail по протоколу LMTP, для этого подредактируем файл /usr/local/etc/postfix/master.cf
Добавим в конце такую строку:

dbmail-lmtp     unix    -       -       n       -       -       lmtp

Теперь перенаправим всю почту для локального домена на DBMail, для этого внесем такую строку в /usr/local/etc/postfix/main.cf, строку тоже добавим в конце:

mailbox_transport = dbmail-lmtp:127.0.0.1:24

Теперь получается, что в принципе все работает, за исключением того, что postfix не знает ничего о тех пользователях, которые есть у DBMail.
Именно, для того, что бы postfix мог сам узнать, принимать или нет письмо для конкретного e-mail, нам и нужна была поддержка MySQL в постфикс.
По этому поводу, кстати, есть большая странность. Везде и в документации и на всех сайтах упоминается только обращение к таблице dbmail_alias, но у меня в этой таблице находятся только алиасы. Что вполне логично. А почтовые ящики находятся в таблице dbmail_users. Поэтому в /usr/local/etc/postfix/main.cf я внес поиск по двум таблицам.
Для этого находим такую строку в /usr/local/etc/postfix/main.cf:

local_recipient_maps = proxy:unix:passwd.byname $alias_maps

и заменяем их на:

local_recipient_maps = mysql:/usr/local/etc/postfix/dbmail-aliases.cf mysql:/usr/local/etc/postfix/dbmail-recip.cf

Первый файл /usr/local/etc/postfix/dbmail-aliases.cf отвечает за поиск получателей по таблице dbmail_aliases, то есть ищет алиасы, содержимое у него такое:

#Пользователь от которого подключаемся к MySQL
user = dbmail
#Пароль для подключения к MySQL
password = dbmail-123
#Адрес сервера MySQL
hosts = localhost
#
dbname = dbmail
#Таблица базы по которой надо искать алиасы
table = dbmail_aliases
#Поле в котором находятся алиасы
select_field = alias
#Это же поле алиасов для использования в where
where_field = alias

Аналогично и для поиска пользователей, файл /usr/local/etc/postfix/dbmail-recip.cf, содержимое его такое:

user = dbmail
password = dbmail-123
hosts = localhost
dbname = dbmail
table = dbmail_users
select_field = userid
where_field = userid

Теперь нужно перезагрузить конфигурацию postfix:

postfix reload

И теперь проверим работоспособность, все данные и пользователи добавлены так, как описано в статье: DBMail. Почтовый сервер c MySQL хранилищем писем.
То есть у нас есть пользователь sh@hilik.org.ua и у него еще есть алиас hilik@hilik.org.ua.
Вот к ним и проверим доставку писем. Для этого с помощью telnet сэмулируем smtp сессию.
Для sh@hilik.org.ua:

telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 zapp.hilik.org.ua ESMTP Postfix
ehlo sh.hilik.org.ua
250-zapp.hilik.org.ua
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:<>
250 2.1.0 Ok
rcpt to:<sh@hilik.org.ua>
250 2.1.5 Ok

В ответ на комманду rcpt to: сервер ответил 250 – значит почту он примет для sh@hilik.org.ua

И теперь для алиаса hilik@hilik.org.ua:

telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 zapp.hilik.org.ua ESMTP Postfix
ehlo sh.hilik.org.ua
250-zapp.hilik.org.ua
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:<>
250 2.1.0 Ok
rcpt to:<hilik@hilik.org.ua>
250 2.1.5 Ok

И тут все нормально. Остается проверить с несуществующим emailом, проверим с spam@hilik.org.ua:

telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 zapp.hilik.org.ua ESMTP Postfix
ehlo sh.hilik.org.ua
250-zapp.hilik.org.ua
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:<>
250 2.1.0 Ok
rcpt to:<spam@hilik.org.ua>
550 5.1.1 <spam@hilik.org.ua>: Recipient address rejected: User unknown in local recipient table

И тут мы получили вполне ожидаемый 550.
Все настроенно и работает правильно.

 

 Буду рад комментариям, постараюсь ответить на вопросы. Заходите на сайт http://www.hilik.org.ua/
 


В избранное