带有正则表达式的 postfix smtp_generic_maps

Che*_*udo 3 postfix regular-expressions rewritemap

我刚刚开始尝试使用 postfix 重写发件人地址。debian-7.11我用和运行服务器postfix-2.9.6

内容/etc/postfix/main.cf

[...]
smtp_generic_maps = hash:/etc/postfix/generic
[...]
Run Code Online (Sandbox Code Playgroud)

内容/etc/postfix/generic

santiago@uranus.caoba.fr        santiago.uranus.caoba.fr@caoba-mail.fr
auguste@uranus.caoba.fr         auguste.uranus.caoba.fr@caoba-mail.fr
Run Code Online (Sandbox Code Playgroud)

到目前为止它有效。当用户santiago发送电子邮件时,它会按照santiago.uranus.caoba.fr@caoba-mail.fr我想要的方式发送。

我的问题是我希望任何用户都可以执行此重写,而不必向/etc/postfix/generic. 所以我想知道是否可以通过某种正则表达式来完成,例如:

(.*)@$hostname  $1.$hostname@caoba-mail.fr
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

感谢您的帮助

圣地亚哥

anx*_*anx 7

后缀手册明确指出何时禁止在regexppcre表中进行插值(主要是因为作者认为在该上下文中使用它是不安全的)。如果相关映射没有说明不是的话,默认是可以插值的。

您可以使用 SQL 查找进行更复杂的映射,但只要您的主机名是固定的并且只有您拥有的域的子域,正则表达式就完全足够了。

为 postfix 安装合适的正则表达式模块

apt install postfix-pcre
Run Code Online (Sandbox Code Playgroud)

添加新/etc/postfix/generic.pcre表:

/([a-z]+)@([^.]+)\.caoba\.fr/  $1.$2.caoba.fr@caoba-mail.fr
Run Code Online (Sandbox Code Playgroud)

更改表类型(即替换现有的hash-type 映射!):

postconf -e smtp_generic_maps=pcre:/etc/postfix/generic.pcre
Run Code Online (Sandbox Code Playgroud)

您可能仍然想检查是否已append_dot_mydomain启用(据我所知,过去默认情况下启用)。Debian 安装了所有相关手册,因此man 5 generic会提出解释。