我可以在virtual_alias_maps中添加全局别名,但只能为本地域添加全局别名?

我想为我的所有域创build一个全局别名来捕获所有的邮件地址,如postmaster@

我已经将这些行添加到aliases.pcre

 /(MAILER-DAEMON|postmaster|abuse|webmaster)@(.*)$/ me@mydomain 

main.cf

 virtual_alias_maps = pcre:/etc/postfix/aliases.pcre 

但它也捕获到外部邮件的邮件,即redirect到我邮件发送到[email protected]

我可以redirect发送到这些地址的所有邮件,但只有当域名在virtual_mailbox_domains ? (没有在aliases.pcre写域名

*更新*

用户,域名,别名..存储在数据库中,使用postfixadmin来pipe理它。

别名表如下所示:

 mysql> describe alias; +----------+--------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------------------+-------+ | address | varchar(255) | NO | PRI | NULL | | | goto | text | NO | | NULL | | | domain | varchar(255) | NO | MUL | NULL | | | created | datetime | NO | | 0000-00-00 00:00:00 | | | modified | datetime | NO | | 0000-00-00 00:00:00 | | | active | tinyint(1) | NO | | 1 | | +----------+--------------+------+-----+---------------------+-------+ 

理想情况下,它应该尊重来自数据库的别名,如果它被设置,并且只redirect邮件的地址没有别名

作为替代方法,而不是像上面提出的长查询,您可以拆分为两个sql映射

 virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf, mysql:/etc/postfix/my-custom-query.cf 

除查询外,这两个文件都有相同的参数。 对于/etc/postfix/mysql-virtual-aliases.cf ,您可以使用postfixadmin中的默认查询

 SELECT goto FROM alias WHERE address = '%s' 

而对于my-custom-query.cf你有查询

 select '[email protected]' AS goto from domain where domain='%d' AND '%u' REGEXP '^(MAILER-DAEMON|postmaster|abuse|webmaster)$' LIMIT 1; 

怎么运行的

如果您的第一张地图mysql-virtual-aliases.cf返回null ,则后缀将尝试查询第二张地图my-custom-query.cf

优点:

  • 如果您的电子邮件地址与mysql-virtual-aliases.cf中的查询匹配,那么您只需运行一个简单的查询。

缺点:

  • 如果您的电子邮件地址与mysql-virtual-aliases.cf中的查询不匹配,则必须运行其他第二个查询。

最后这是我configuration的

/etc/postfix/mysql-virtual-aliases.cf

 hosts = localhost user = postfix password = mypass dbname = postfix query = SELECT goto FROM alias WHERE address = '%s' 

/etc/postfix/mysql-virtual-aliases-postmaster.cf

 hosts = localhost user = postfix password = mypass dbname = postfix query = SELECT 'me@mydomain' AS goto FROM domain WHERE domain='%d' AND active = '1' AND '%u' REGEXP '^(MAILER-DAEMON|postmaster|abuse|webmaster)$' LIMIT 1 

并在main.cf

 virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-aliases.cf, mysql:/etc/postfix/mysql-virtual-aliases-postmaster.cf 

也许有人知道更容易/有效的方法?