基于外部定义别名类别的 Postfix 自定义标头

基于外部定义别名类别的 Postfix 自定义标头

在我的邮件服务器上,我有一些按类别分组的别名。这些别名存储在带有 postmap 的哈希数据库中。

aaa@domain foo-filter@domain
bbb@domain foo-filter@domain
ccc@domain bar-filter@domain
ddd@domain foo-filter@domain
...
foo-filter@domain mymailbox@domain
bar-filter@domain mymailbox@domain
...

我的目标是通过添加自定义标头来围绕 foo-filter 和 bar-filter 地址构建自动过滤。我创建了一个标头检查:

/(.+filter)@domain/  PREPEND X-MyCustomFilter: $1

我将其添加到 main.cf:

smtpd_recipient_restrictions = (...) check_recipient_access pcre:/etc/postfix/addheader

当我向 aaa@domain 发送邮件时,不会创建标头,只有当我直接向 foo-filter@domain 发送邮件时才会创建,这违背了使用不同地址的目的。

我也会接受使用 mysql 查找的解决方案,因为相同的数据也可在 mysql 表中使用。

答案1

我找到了一个简单的/强力的解决方案。这不是我所期望的,但也许值得在这里发布,因为我在此过程中遇到了很多小事故。

解决方案:硬编码的正则表达式表

由于我无论如何都会生成别名文件,因此我现在只需生成第二个文件,categories该文件名为,每个别名都有一行,如下所示:

 /^aaa@domain/ PREPEND X-Category: foo
 /^bbb@domain/ PREPEND X-Category: foo
 /^ccc@domain/ PREPEND X-Category: bar
 /^ddd@domain/ PREPEND X-Category: bar

顺便说一下,之间的第一部分/是一个与 exakt 地址匹配的正则表达式,其中^标记开始,因此我不会遇到aaa@domain和的麻烦aaaa@domain。(在此处查看更多信息:http://www.postfix.org/regexp_table.5.html

来自文档:

按照表中指定的顺序应用模式,直到找到与输入字符串匹配的模式。

这意味着这个解决方案有一个警告:像这样的硬编码大概对于大型服务器来说不可行。(我的服务器仅服务于两个邮箱)

我在调试时发现的其他有用的东西:

确保最后一行也是换行符,否则将无法识别。然后将此内容添加到 main.cf:

smtpd_recipient_restrictions = (...) check_recipient_access regexp:/path/to/categories

重新加载一次 postfix。类别文件更改时无需重新加载。

非常有用的命令来检查一切是否正常,而无需发送 20k 封测试邮件,如下所示:

postmap -q "aaa@domain" regexp:/path/to/categories

这一切是为了什么:现在我可以使用 sieve 过滤器来检查该类别。我们使用了很多别名,在创建别名时设置类别变得很容易,而不必去将新别名添加到 sieve 脚本中。

相关内容