Псевдоним со всеми пользователями в таблице 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, где я делаю конкатенацию имени пользователя и своего домена:

+------------------------------+-------------------------------------------------+-------------+------------------+------+------+---------------------------------------+---------+
| email_fqn                    | mailbox_userpath                                | user_name   | domain_name      | uid  | gid  | mailbox_basepath                      | quota   |
+------------------------------+-------------------------------------------------+-------------+------------------+------+------+---------------------------------------+---------+
| [email protected]       | /home/maildir/piduna.pp.ua/public/.logistic     | .logistic   | piduna.pp.ua     | 2000 | 2000 | /home/maildir/piduna.pp.ua/public     | 2048000 |
| [email protected]              | /home/maildir/piduna.pp.ua/1c                   | 1c          | piduna.pp.ua     | 2000 | 2000 | /home/maildir/piduna.pp.ua            | 2048000 |
| [email protected]           | /home/maildir/piduna.pp.ua/admin                | admin       | piduna.pp.ua     | 2000 | 2000 | /home/maildir/piduna.pp.ua            | 2048000 |
| [email protected]      | /home/maildir/piduna.pp.ua/al.service           | al.service  | piduna.pp.ua     | 2000 | 2000 | /home/maildir/piduna.pp.ua            | 2048000 |

Мне нужно создать псевдонимы. Например, на [email protected], мне нужно отправить письмо на [email protected] и [email protected]. Я делаю это. Этот стол:

+------------------------+-------------------------------------------------+
| source                 | destination                                     |
+------------------------+-------------------------------------------------+
| [email protected]        | [email protected], [email protected]     |
+------------------------+-------------------------------------------------+

В 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

И этот рабочий. Но в моей организации у меня есть псевдоним для всех пользователей. Его зовут [email protected]. И, когда я создал нового пользователя, мне нужно добавить его в псевдоним [email protected]. Как создать псевдоним, который автоматически берет все учетные записи пользователей из моей первой таблицы?

Я думаю, что мне нужно создать таблицу с одним параметром: [email protected], а после этого создать VIEW, где я делаю конкатенацию user_name & domain из первой таблицы? Это верно ? И как это сделать правильно?


person Piduna Valeriu    schedule 09.01.2016    source источник
comment
Как вы в итоге решили это?   -  person Allen Luce    schedule 16.03.2016


Ответы (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@» отправлялся на все адреса электронной почты, которые находятся в этом домене.

person Allen Luce    schedule 15.01.2016