别名与mysql表中的所有用户为postfix / dovecot

时间:2016-01-09 17:45:08

标签: mysql mail-server dovecot aliases

我有一个包含用户邮件服务器的表。这张表用于dovecot中的imap authenfication:

+-------------+------------------+-------------------+------------------+------+------+---------------------------------------+--------+---------+---------------------------+
| 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             |

接下来,我在MYSQL中使用VIEW,在那里我创建了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,其中我创建了concatenatio user_name&域名,从第一张桌子?它是否正确 ?以及如何正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

你可以用SQL技巧来做到这一点:

  function topDomainFromURL($url) {
    $url_parts = parse_url($url);
    $domain_parts = explode('.', $url_parts['host']);
    if (strlen(end($domain_parts)) == 2 ) { 
      // ccTLD here, get last three parts
      $top_domain_parts = array_slice($domain_parts, -3);
    } else {
      $top_domain_parts = array_slice($domain_parts, -2);
    }
    $top_domain = implode('.', $top_domain_parts);
    return $top_domain;
  }

这样就可以使任何“所有@”地址发送到该域中的所有电子邮件地址。