postfix smtp 中继脚本

postfix smtp 中继脚本

我有一个 Postfix 服务器并将其与 Outlook(POP/SMTP)一起使用。

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

对于该发件人地址,我希望该 postfix 将邮件转发到第二个 SMTP 服务器。我认为这应该可以毫无问题地实现。

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

我已经找到了一些关于在收到电子邮件时执行脚本的信息,但我只想在 postfix 将邮件中继到第二个 SMTP 服务器之前建立 SSH 隧道。

答案1

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

如果你能让隧道保持畅通,那将是轻而易举的事,你只需设置一个

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

運輸。

答案2

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

当隧道未连接时,postfix 将暂时的由于 -error 而推迟发送电子邮件Connection refused。因此您不必担心丢失电子邮件。

然后设置 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

相关内容