我想为我的所有域名创建一个全局别名,以捕获所有发往以下地址的邮件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
也许有人知道更简单/有效的方法?