后缀smtp中继脚本

我有一个Postfix服务器,并使用它与Outlook(POP / SMTP)。

我有一个帐户不同的发件人地址。 现在我想为特定的发件人地址configuration一个中继。 例如,我有我的主域domain1.com的后缀。 现在我有一个发件人地址是domain2.com。

对于该发件人地址,我希望该后缀将邮件中继到第二个SMTP服务器。 我认为这应该是没有问题的。

但问题是我必须创build一个SSH隧道到第二个服务器连接到SMTP服务器。 但是我不能使用一个持久的SSH连接,所以我想知道在将邮件转发到第二个SMTP服务器之前,postfix是否可能执行一些脚本

我已经find了一些在收发邮件时执行脚本的信息,但是我只想在postfix将邮件转发到第二个SMTP服务器之前build立SSH隧道。

你究竟如何实现它取决于你,但你可以创build自己的传输,并且该传输可以是脚本或守护进程等。

如果你能保持隧道,这将是一件轻而易举的,你只是设置一个

domain2.com smtp:127.0.0.1:2000(或本地分配的任何端口)

运输起来。

Postfix在交付时不支持脚本挂钩。 为了解决这个问题,你可以设置一个crontab来执行一个特殊的脚本。 这个脚本将会:

  1. 设置SSH隧道
  2. 冲洗队列。

首先,定义sender_dependent_relayhost_maps,右边的值是你的隧道端口(例如端口2525)。

 #/etc/main.cf sender_dependent_relayhost_maps = hash:/etc/postfix/sshtunnel #/etc/postfix/sshtunnel domain2.com smtp:[127.0.0.1]:2525 

当隧道没有连接时,由于Connection refused – 错误,postfix将暂时延迟电子邮件。 所以你不用担心丢失电子邮件。

然后设置crontab执行上面的脚本。 这里是伪文字来实现这些目标。 从这个原始脚本稍微修改。

 #!/bin/sh #setup ssh tunnel. modify the parameter for your needs ssh -L 2525:localhost:25 [email protected] # Start mail deliveries. /usr/sbin/sendmail -q # Allow deliveries to start. sleep 10 # Loop until all messages have been tried at least once. while mailq | grep '^[^ ]*\*' | grep domain2.com >/dev/null do sleep 10 done