我想在我的 Postfix 邮件服务器上实现自毁电子邮件地址规则。这个想法是有这样的公共地址:
john0220@mydomain.com
Run Code Online (Sandbox Code Playgroud)
其中,0220
在地址手段“二月2020”。如果 Postfix 在 2020 年 3 月 1 日之前收到此地址的电子邮件,它将被发送到某些非公开电子邮件(例如mark@mydomain.com
),但在此日期之后,该电子邮件将被丢弃(/dev/null
)。
这样的系统将允许我拥有无限数量的临时地址。
Postfix 允许正则表达式匹配收件人地址,但如何根据时间进行条件重写?
通过添加足够动态的查找方法(例如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 postconf
和man 5 aliases
),该参数会在地址扩展名 (+foo) 先前不匹配的情况下更改行为。
归档时间: |
|
查看次数: |
180 次 |
最近记录: |