В общем стоит задача:
Есть база mysql (сформированная postfixadmin), если пользователь есть в базе, то доставлять почту в его ящик, если нету, то доставлять в какой-либо общий ящик.
Попробовал решить с помощью sieve, но возник затык: dovecot lda сначала проверяет почту с помощью sieve скриптов, а потом только смотрит на mysql ящики, можно ли сделать наоборот, либо сделать проверку существования mysql пользователей в самом sieve скрипте?Если кто-то знает альтернативное решение поставленной задачи, то буду рад его увидеть
>[оверквотинг удален]
>Есть база mysql (сформированная postfixadmin), если пользователь есть в базе, то доставлять
>почту в его ящик, если нету, то доставлять в какой-либо общий
>ящик.
>Попробовал решить с помощью sieve, но возник затык: dovecot lda сначала проверяет
>почту с помощью sieve скриптов, а потом только смотрит на mysql
>ящики, можно ли сделать наоборот, либо сделать проверку существования mysql пользователей
>в самом sieve скрипте?
>
>Если кто-то знает альтернативное решение поставленной задачи, то буду рад его увидеть
>переписать SQL-запрос, чтобы он всегда возвращал нужное значение - либо пользователя либо имя общего ящика.
>переписать SQL-запрос, чтобы он всегда возвращал нужное значение - либо пользователя либо
>имя общего ящика.Хм, запрос для dovecot переписал:
SELECT username AS user, maildir FROM mailbox WHERE username = '%u' AND active = '1'
UNION
SELECT username AS user, maildir FROM mailbox WHERE username = 'mail@domain.ru' AND active = '1' LIMIT 1Запрос может не самый лучший, но отрабатывает нормально. Пытаюсь отправить почту на test@domain.ru В этом случае создаётся ящик test@domain.ru и почта направляется на него, вместо того чтобы доставить на mail@domain.ru. вот лог:
Jan 23 12:19:52 2413 dovecot: auth(default): master in: USER 1 test@domain.ru service=deliver
Jan 23 12:19:52 2413 dovecot: auth-worker(default): sql(test@domain.ru): SELECT username AS user, maildir, 1150 AS uid, 12 AS gid FROM mailbox WHERE username = 'test@domain.ru' AND active = '1' UNION SELECT username AS user, maildir, 1150 AS uid, 12 AS gid FROM mailbox WHERE username = 'mail@domain.ru' AND active = '1' LIMIT 1
Jan 23 12:19:52 2413 dovecot: auth-worker(default): auth(test@domain.ru): username changed test@domain.ru -> mail@domain.ru
Jan 23 12:19:52 2413 dovecot: auth(default): master out: USER 1 mail@domain.ru maildir=mail@domain.ru/ uid=1150 gid=12
Jan 23 12:19:52 2413 deliver(test@domain.ru): auth input: maildir=mail@domain.ru/
Jan 23 12:19:52 2413 deliver(test@domain.ru): auth input: uid=1150
Jan 23 12:19:52 2413 deliver(test@domain.ru): auth input: gid=12
Jan 23 12:19:52 2413 deliver(test@domain.ru): maildir: data=/var/vmail/test@domain.ru
Jan 23 12:19:52 2413 deliver(test@domain.ru): maildir++: root=/var/vmail/test@domain.ru, index=, control=, inbox=/var/vmail/test@domain.ru
Jan 23 12:19:53 2413 deliver(test@domain.ru): msgid=<5b3f3f050901230119x783441b9o811374275407c515@mail.gmail.com>: saved mail to INBOX
Jan 23 12:19:53 2413 postfix/pipe[17736]: 8EC8C792D57: to=<test@domain.ru>, relay=dovecot, delay=0.94, delays=0.6/0.01/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
Jan 23 12:19:53 2413 postfix/qmgr[4079]: 8EC8C792D57: removed
Изменил запрос virtual_mailbox для postfix, в логах пишет что нашёл мой нужный почтовый ящик, а ${recipient} всё равно остаётся старым, и в dovecot delivery передаётся старый приёмник, как мне изменить recipient на новый?
>Изменил запрос virtual_mailbox для postfix, в логах пишет что нашёл мой нужный
>почтовый ящик, а ${recipient} всё равно остаётся старым, и в dovecot
>delivery передаётся старый приёмник, как мне изменить recipient на новый?Создайте новый алиас через Postfix Admin:
To create a catch-all use an "*" as alias.
For domain to domain forwarding use "*@domain.tld" as to.
>To create a catch-all use an "*" as alias.
>For domain to domain forwarding use "*@domain.tld" as to.Да, я так и сделал, просто я сразу так не сделал потому что думал что алиасы будут вообще всю почту переправлять, не обращая внимание на созданные ящики, спасибо, всё работает