这听起来有点令人费解和复杂,但我们目前在我的一个客户环境中为电子邮件设置了一个非常糟糕的设置。
从最里面的系统到外面,我们有:
Exchange Server -> Sendmail Server -> McAfee Email Gateway -> OUTSIDE
这有点邪恶,因为外部目的地不在办公室电子邮件(从系统内部的某个人到外部)不起作用,它们似乎被 McAfee 电子邮件网关捕获并且不会在外部中继。
我正在尝试做的是将 Postfix 服务器设置为中继和 SMTP 服务器,并且取决于接收到的内容:
- 直接发送电子邮件(使用 SMTP,仅适用于外出回复)
- 将邮件中继到 Sendmail 服务器,以完成正常情况下的其余中继职责。
这看起来有点像以下:
Exchange Server -> Postfix Relay --- Out of Office messages only ---> OUTSIDE
|
All other mail
|
---> Sendmail Server/Relay ---> McAfee Email Gateway ---> OUTSIDE
我对如何为选择性中继选项配置 Postfix 有点犹豫。有没有人可以就如何实现这一目标提供一些见解?
我想出了一个非常hackish的方法。
本质上,我在 Postfix 服务器和实际处理真正中继路由的 Exchange 服务器之间放置了一个用 Python 编写的自定义 SMTP“服务器” 。它是用 Python 编写的,并在端口 25 上以超级用户身份运行(因为端口绑定限制)。
然后,该 Python 脚本像往常一样处理消息,运行来自字符串解析器的电子邮件,然后读取主题行以确定将其发送到哪里,然后将原始消息原封不动地发送到本地 Postfix SMTP 服务器(直接向外发送),或发送到网络上的其他中继。到目前为止,它似乎正在工作。
这是我在 Python 方面使用的代码:
我将 Postfix 配置为在不同端口上侦听 SMTP。实际上,这就是最终
/etc/postfix/master.cf
在我的 Ubuntu 服务器上完成的工作,最终是这两行以及我如何在 Postfix 中配置 SMTPd - 请注意,您可以将任何高编号端口用于 Postfix SMTPd 的任何其他端口,但我选择了一些简单的东西:然后 Python 脚本将数据转发到 port
6625
, Postfix 的 SMTPd 在那里运行;完成后,我们专门让 Python 确定哪个 SMTP 服务器或中继是“下一跳”。这有点打破了标准的“接收者”标头,但它应该可以很好地处理消息。我的解决方案没有遇到任何问题,而且它似乎正在工作。额外的测试是必要的,但这个“解决方案”似乎解决了如何路由消息(直接 SMTP 输出,或通过其余中继)的路由问题,而不会真正弄乱 Postfix 配置。