Псевдоним со всеми пользователями в таблице MySQL для postfix/dovecot
У меня есть таблица с пользователями для моего почтового сервера. Эта таблица для аутентификации imap в dovecot:
+-------------+------------------+-------------------+------------------+------+------+---------------------------------------+--------+---------+---------------------------+
| user_name | domain_name | passwd | pwd_hash | uid | gid | mailbox_basepath | enable | quota | desc_rec |
+-------------+------------------+-------------------+------------------+------+------+---------------------------------------+--------+---------+---------------------------+
| logistic | piduna.pp.ua | loG-1990M | _no_hash_passwd_ | 2000 | 2000 | /home/maildir/piduna.pp.ua/ | 1 | 2048000 | box for logistic |
| 1c | piduna.pp.ua | 1c_user_1c | _no_hash_passwd_ | 2000 | 2000 | /home/maildir/piduna.pp.ua | 1 | 2048000 | Denisyuk V.V. |
| admin | piduna.pp.ua | AAddMmM1N | _no_hash_passwd_ | 2000 | 2000 | /home/maildir/piduna.pp.ua | 1 | 2048000 | Admin |
| al.service | piduna.pp.ua | Alumo_Serv4321 | _no_hash_passwd_ | 2000 | 2000 | /home/maildir/piduna.pp.ua | 1 | 2048000 | Alumo Service |
Далее я использую VIEW в MYSQL, где я создаю имя пользователя concatenatio и мой домен:
+------------------------------+-------------------------------------------------+-------------+------------------+------+------+---------------------------------------+---------+
| email_fqn | mailbox_userpath | user_name | domain_name | uid | gid | mailbox_basepath | quota |
+------------------------------+-------------------------------------------------+-------------+------------------+------+------+---------------------------------------+---------+
| .logistic@piduna.pp.ua | /home/maildir/piduna.pp.ua/public/.logistic | .logistic | piduna.pp.ua | 2000 | 2000 | /home/maildir/piduna.pp.ua/public | 2048000 |
| 1c@piduna.pp.ua | /home/maildir/piduna.pp.ua/1c | 1c | piduna.pp.ua | 2000 | 2000 | /home/maildir/piduna.pp.ua | 2048000 |
| admin@piduna.pp.ua | /home/maildir/piduna.pp.ua/admin | admin | piduna.pp.ua | 2000 | 2000 | /home/maildir/piduna.pp.ua | 2048000 |
| al.service@piduna.pp.ua | /home/maildir/piduna.pp.ua/al.service | al.service | piduna.pp.ua | 2000 | 2000 | /home/maildir/piduna.pp.ua | 2048000 |
Мне нужно создать псевдонимы. Например, на it@vpiduna.pp.ua мне нужно отправить письмо на admin@vpiduna.pp.ua и al.service@vpiduna.pp.ua. Я делаю это. Этот стол:
+------------------------+-------------------------------------------------+
| source | destination |
+------------------------+-------------------------------------------------+
| it@piduna.pp.ua | admin@piduna.pp.ua, al.service@piduna.pp.ua |
+------------------------+-------------------------------------------------+
В mysql-virtual_aliases.cf:
user = root
password = myPassword
dbname = mail_db
query = SELECT destination FROM virtual_aliases WHERE source='%s'
hosts = 127.0.0.1
И это работает. Но в моей организации у меня есть псевдоним для всех пользователей. Его зовут all@piduna.pp.ua. И, когда я создал нового пользователя, мне нужно добавить его в псевдоним all@piduna.pp.ua. Как создать псевдоним, который автоматически берет все учетные записи из моей первой таблицы?
Я думаю, что мне нужно создать таблицу с одним параметром: all@piduna.pp.ua, и после этого создать VIEW, где я создаю concateatio user_name & domain из первой таблицы? Это правильно? И как это сделать правильно?
1 ответ
Вы можете сделать это с хитростью SQL:
SELECT IF((@addy:='%s') REGEXP '^all@.*', (
SELECT email_fqn FROM your_email_view WHERE
domain=SUBSTRING(@addy,INSTR(@addy,'@')+1)
), (
SELECT destination FROM virtual_aliases WHERE source=@addy
))
Это должно сделать так, чтобы любой "all@" адрес отправлялся на все адреса электронной почты, которые находятся в этом домене.