我可以在 virtual_alias_maps 中添加全局别名,但仅限于本地域吗?

我可以在 virtual_alias_maps 中添加全局别名,但仅限于本地域吗?

我想为我的所有域名创建一个全局别名,以捕获所有发往以下地址的邮件postmaster@

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

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

以及main.cf

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

但它也会捕获发送到外部域的邮件,即将发送到的邮件重定向到我[电子邮件保护]

我可以重定向所有发送到这些地址的邮件,但前提是域名在virtual_mailbox_domains?(无需在aliases.pcre

* 更新 *

用户、域、别名..都存储在数据库中,使用 postfixadmin 进行管理。

别名表如下所示:

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

理想情况下,它应该尊重数据库中的别名(如果已设置),并且只重定向没有别名的地址的邮件

答案1

作为替代方案,你可以将上面建议的长查询拆分为两个 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返回无效的,那么 postfix 将尝试查询第二个地图my-custom-query.cf

优点:

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

缺点:

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

答案2

最后这是我配置的

/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

也许有人知道更简单/有效的方法?

相关内容