如何configurationPostfix只发送带有特定标题的邮件?

我正在设置一个本地开发虚拟机,并且能够使用带有/.*/ username虚拟_alias_maps 所有发出的电子邮件redirect到本地邮箱。

我想添加的是一个选项, 如果电子邮件包含某个标题, 则不会将电子邮件redirect到本地邮箱。

换句话说, 如果在外发电子邮件中find某个标题,则发送它,但是如果标题丢失,则应将其redirect到本地邮箱。

我将如何能够实现这个使用Postfix的?

非常感谢你的帮助!

首先我们在master.cf定义两个smtpd进程,一个启用了重写,另一个禁用了重写。 启用重写的SMTPD在master.cf中默认存在。 现在我们将这些线

 127.0.0.1:2525 inet n - n - 2000 smtpd -o receive_override_options=no_header_body_checks,no_address_mappings 

这将启用另一个smtpd进程

  • 在端口本地主机IP端口2525监听
  • 随着header_checksfunction和重写function被禁用。

这里是你的请求的伪代码

 if header exist (postfix will checks via header_cheks) no rewrite else rewrite with virtual_alias_maps 

我们将用header_checks来实现这个逻辑。

main.cf添加这一行

  header_checks = regexp:/etc/postfix/mycustomheader 

/etc/postfix/mycustomheader

 /^X-Your-Header/ FILTER smtp:[127.0.0.1]:2525 

怎么运行的

每当postfix检测到消息中的X-Your-Header时,它就会将电子邮件redirect到第二个smtpd进程,正如我们之前定义的那样。 如果标题不存在,您的电子邮件将通过启用重写的默认smtpd进程。

从tpml7中分配伪代码

 if header exist (postfix will checks via header_cheks) no rewrite --> different instance else rewrite with virtual_alias_maps same instance 

AFAIK后缀可以redirect电子邮件,如果某些标题存在。 请参阅man header_checks上的 REDIRECTfunction。

不幸的是 – 基于上面的伪代码 – 如果某个头文件不存在,您的请求就会redirect电子邮件。 我已经尝试了一些简单的解决方法。 但是因为你的请求没有直接支持,所以这个解决scheme并不复杂。 特别是这个解决scheme需要学习关于postfix多实例 。

我会在这里写出纲要 – 不是一步一步确切的 – 随便问一下是否还有一些含糊的东西。


要做到这一点,你需要两个多实例。 一是做header_checks,二是做正常传出。

第一个实例将在master.cf定义两个smtpd守护进程。 一个守护进程(默认)监听*:25,第二个监听127.0.0.1:12525。

二审将听取127.0.0.1:22525

第一个例子

 ##main.cf # your header filter header_checks = pcre:/path/to/header_checks # no rewriting receive_override_options = no_address_mappings # send to second instance relayhost = [127.0.0.1]:22525 virtual_alias_maps = pcre:/your/catch-all ##master.cf # second smtpd but with rewriting enabled [127.0.0.1]:12515 inet n - n - - smtpd -o receive_override_options= # /path/to/header_checks /^MyHeader/ FILTER smtp:[127.0.0.1]:12525 

第二审

只需像第一个postfix实例一样安装,不需要header_checks,relayhost,virtual_alias_maps和receive_override_options(正常的postfix安装)。 设置master.cf,所以它只在[127.0.0.1]:22525监听。 设置myhostname ,使其与第一个实例不同。