Postfix 中的 catch-all 别名之后的 ${extension} 为空

Postfix 中的 catch-all 别名之后的 ${extension} 为空

我想要一个设置,其中电子邮件地址如下[电子邮件保护]将邮件重定向到文件夹 foo。我已经配置并测试了 dovecot。它由 postfix 使用 master.cf 中的以下行调用:

dovecot unix    -       n       n       -       -      pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -n -m ${extension}

我希望${extension}扩展为“foo”,但它始终是空的。

我已经添加

recipient_delimiter = +

到我的 main.cf。

我怎样才能让它工作?

我有一个万能别名,可将 @example.com 重定向到[电子邮件保护]。看来扩展名是空的,因为这个。所以问题变成了:我能有个万能钥匙吗[电子邮件保护]重定向至[电子邮件保护]没有明确定义随机或扩展部分?

答案1

您将需要使用正则表达式映射才能使其工作。

以下是一个帖子听听 Wietse 对此事的看法。

您可以使用正则表达式表而不是固定字符串映射,并进行任意地址转换:

/\+([^+]+)@example\.com$/   localuser2+$1localhost 

您可以在以下位置获得正则表达式方案的解释regex101。简而言之,括号()将捕获扩展名并将其传递给您的别名。

答案2

我有一个使用 Postfix 和 CourierIMAP 的类似设置。你可以尝试使用进程邮件来处理这个问题。我设置了一个通配符,这样所有的邮件都会发送给一个用户,然后使用 procmail 规则根据邮件发送的地址将邮件过滤到不同的文件夹中。

例如,这将把发送至 adsense 或 google@domain.com 的电子邮件过滤到 Google 文件夹中:

:0
* ^(To|CC|BCC).*(adsense|google)\@domain\.com
.Google/

为了扩展此目的,您可以使用更高级的规则,如下所示:

:0
* ^(To|CC|BCC).*user\+\/.*\@domain\.com
.`echo $MATCH | sed 's/\@.*//'`/

但是,请注意,文件夹区分大小写,您需要确保文件夹已创建。您可以采取更高级的方法,在必要时,只需编写脚本即可创建尚不存在的文件夹。

相关内容