exim + cyrus + mysql - virtualdomains
Настраиваю связку exim + cyrus_imap + mysql
Логины пользователей имеют вид user_xxx, ящики - user@domain
Почту предполагается хранить в imap.
При отправке по smtp получаю следующее сообщение в логах:
May 31 20:29:40 inside02 exim[7368]: Delay 0s for melchior.shinkei.ru [89.163.122.149] with HELO=shinkei.ru. Mail from shinkei@ya.ru to admin@kadva.ru.
May 31 20:29:49 inside02 exim[7368]: 1K2Txj-0001uq-2E <= shinkei@ya.ru H=melchior.shinkei.ru (shinkei.ru) [89.163.122.149] I=[77.222.32.6]:25 P=smtp S=227 from <shinkei@ya.ru> for admin@kadva.ru
May 31 20:29:49 inside02 exim[7395]: 1K2Txj-0001uq-2E ** admin@kadva.ru R=mysqluser T=cyrus_delivery: LMTP error after RCPT TO:<admin@kadva.ru>: 550-Mailbox unknown. Either there is no mailbox associated with this\n550-name or you do not have authorization to see it.\n550 5.1.1 User unknown
Судя по всему мой EXIM пытается скормить cyrus письмо для admin@kadva.ru. При этом я желаю чтобы письма он кормил не для алиаса admin@kadva.ru к ящику kadva_1, а именно для kadva_1.
В конфиге EXIM по этому поводу есть:
# чё делаем с почтой
begin routers
# Поиск маршрута к хосту в DNS. Если маршрут не найден в DNS -
# то это `унроутабле аддресс`. Не проверяются локальные
# домены, 0.0.0.0 и 127.0.0.0/8
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql{select alias.address from box, alias \
where alias.address='${quote_mysql:$local_part@$domain}' \
and box.box_id=alias.box }}
mysqluser:
driver = accept
condition = ${if eq{}{${lookup mysql{select box.login from box, alias \
where alias.address='${quote_mysql:$local_part@$domain}' \
and box.box_id=alias.box }}}{no}{yes}}
transport = cyrus_delivery
# начинаются транспорты - как доставляем почту
begin transports
# Доставка на удалённые хосты - по SMTP
remote_smtp:
driver = smtp
# Транспорт для доставки почты локальным пользователям.
cyrus_delivery:
driver = lmtp
socket = /var/imap/socket/lmtp
batch_max = 100
user = cyrus
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
# Имя программы
address_pipe:
driver = pipe
return_output
# Транспорт для автоответов
address_reply:
driver = autoreply
Вообще всё нагло содрано с http://www.lissyara.su/?id=1626
только у меня база своя, и логин напрямую совпадает с именем папки юзера в imap.
Куда копать?
База алиасов:
alias_id
box (id бокса)
address (admin@kadva.ru например)
domain (id домена)
База боксов:
box_id
login (логин, он же имя папки в imap)
pass
База доменов:
domain_id
domain
active_flag
Последняя таблица юзается только для удобства