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

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

我想在我的 Postfix 邮件服务器上实施自毁电子邮件地址规则。想法是拥有如下公共地址:

[email protected]

其中0220地址表示“2020 年 2 月”。如果 Postfix 在 2020 年 3 月 1 日之前收到发往此地址的电子邮件,它将被发送到某个非公开电子邮件(例如[email protected]),但在此日期之后,电子邮件将被丢弃(/dev/null)。

这样的系统可以让我拥有无数个临时地址。

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

答案1

做出任何合适的查找表通过添加足够动态的查找方法来动态化,例如SQLite如果后缀本身会发送邮件(没有 dovecot 等),alias表格似乎合适。我将演示local邮件(类似的配置可用于virtual)。

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

alias_maps = hash:/etc/aliases sqlite:/etc/postfix/date-dependant-aliases.cf

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

# /etc/postfix/date-dependant-aliases.cf
dbpath = /dev/null
expansion_limit = 1
query = WITH T (prio, forward_addr, condition) AS ( VALUES (1, '[email protected]', '%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;

查询解释(注意local交付代理插入小写键为%s,其他%需引用):

WITH T (prio, forward_addr, condition)                    -- sub-query
AS ( VALUES                                               -- with these 2 rows:
(1, '[email protected]',                              -- 1: real address,
'%s' >= ('john' || substr(strftime('%%Y%%m', 'now'),3))), -- if >= current months alias
    -- SQLite doesnt have 2-digit dates in strftime
(2, 'devnull', 1=1))                                      -- 2: discard, always
SELECT forward_addr FROM T                                -- postfix only needs the target
WHERE '%s' LIKE 'john____'                                -- require matching template
    -- no REGEXP support; just match 4 arbitrary chararacters
AND condition ORDER BY prio ASC LIMIT 1;                  -- select best match from sub-query

您应该使用以下命令验证该查询是否适合您的需要postmap

postmap -q john$(date +'%y%m' -d '+1 year') sqlite:/etc/postfix/date-dependant-aliases.cf
[email protected]
postmap -q john$(date +'%y%m') sqlite:/etc/postfix/date-dependant-aliases.cf
[email protected]
postmap -q john$(date +'%y%m' -d '-31 days') sqlite:/etc/postfix/date-dependant-aliases.cf
devnull
postmap -q john1801 sqlite:/etc/postfix/date-dependant-aliases.cf
devnull

请注意propagate_unmatched_extensions参数(参见man 5 postconfman 5 aliases),如果地址扩展(+foo)先前未匹配,它会改变行为。

相关内容