Postfix上的自毁收件人地址(重写收件人地址)

biz*_*wiz 5 postfix

我想在我的 Postfix 邮件服务器上实现自毁电子邮件地址规则。这个想法是有这样的公共地址:

john0220@mydomain.com
Run Code Online (Sandbox Code Playgroud)

其中,0220在地址手段“二月2020”。如果 Postfix 在 2020 年 3 月 1 日之前收到此地址的电子邮件,它将被发送到某些非公开电子邮件(例如mark@mydomain.com),但在此日期之后,该电子邮件将被丢弃(/dev/null)。

这样的系统将允许我拥有无限数量的临时地址。

Postfix 允许正则表达式匹配收件人地址,但如何根据时间进行条件重写?

anx*_*anx 4

通过添加足够动态的查找方法(例如SQLite )使任何合适的查找表动态化。如果postfix本身发送邮件(没有鸽舍等),则该alias表似乎合适。我将演示local邮件(可以进行类似配置virtual)。

您可以保留现有的(例如hash:)查找并仅添加新方法:

alias_maps = hash:/etc/aliases sqlite:/etc/postfix/date-dependant-aliases.cf
Run Code Online (Sandbox Code Playgroud)

您可能需要安装对新查找类型的支持我选择SQLite,因为如果我的查询不使用数据库,则不需要设置数据库。

# /etc/postfix/date-dependant-aliases.cf
dbpath = /dev/null
expansion_limit = 1
query = WITH T (prio, forward_addr, condition) AS ( VALUES (1, 'mark@mydomain.example', '%s' >= ('john' || substr(strftime('%%Y%%m', 'now'),3))), (2, 'devnull', 1=1)) SELECT forward_addr FROM T WHERE '%s' LIKE 'john____' AND condition ORDER BY prio ASC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

查询说明(注意local送货代理插入小写%s,其他%需要引用):

alias_maps = hash:/etc/aliases sqlite:/etc/postfix/date-dependant-aliases.cf
Run Code Online (Sandbox Code Playgroud)

您应该使用以下方法验证查询是否适合您的需求postmap

# /etc/postfix/date-dependant-aliases.cf
dbpath = /dev/null
expansion_limit = 1
query = WITH T (prio, forward_addr, condition) AS ( VALUES (1, 'mark@mydomain.example', '%s' >= ('john' || substr(strftime('%%Y%%m', 'now'),3))), (2, 'devnull', 1=1)) SELECT forward_addr FROM T WHERE '%s' LIKE 'john____' AND condition ORDER BY prio ASC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

请注意propagate_unmatched_extensions参数(请参阅man 5 postconfman 5 aliases),该参数会在地址扩展名 (+foo) 先前不匹配的情况下更改行为。