我有一个 VPS,上面有一个 sendmail 实例,用于从我托管的几个 Wordpress 网站传递邮件。sendmail 与 Wordpress 网站位于同一台机器上,我希望保持这种状态,以便更快地传递本地邮件。sendmail 服务器只监听本地连接,并且还设置了防火墙来拦截传入连接。
我的两个客户使用 G-Suite,一个使用 Office 365。只要配置为信任发送机器的 IP 地址,这两个客户都可以接收邮件并进行中继。其他客户则直接发送邮件,并在其 SPF 记录中将此服务器列入白名单。
是否可以配置 sendmail 来自动监听其他端口,然后将通过特定端口发送的邮件智能托管到特定服务?
G-Suite 有一个中继点 (smtp-relay.gmail.com),而每个 O365 域都有自己独特的域 example-com.mail.protection.outlook.com。我不介意配置每个端口/智能主机组合,但想知道这是否可行,如果可行,如何配置。
例如:
- 25日收到的邮件:排队等待直接投递。
- 26 日收到的邮件:转发至 smtp-relay.gmail.com
- 27 日收到的邮件:中继至 example-com.mail.protection.outlook.com
- 28 日收到的邮件:中继至 example2-com.mail.protection.outlook.com
然后我将配置每个邮件发送实例以与特定端口进行通信:
- 客户A:127.0.0.1:25
- 客户B:127.0.0.1:27
- ETC。
答案1
嗯,基本上有三种方法可以解决这个问题,通常它们是最好的、老式的和绝地武士的 :)。最好的方法是在 2018 年彻底放弃 sendmail,开始使用 postfix 或 exim,这样可以更轻松地微调邮件路由。
老式方法(可能也是您正在寻找的方法)是sendmail.cf
为每个要使用的传入端口创建单独的文件,在每个文件中指定监听端口和适当的智能主机,然后sendmail
为每个端口运行不同的守护进程。这就是 8.10 之前的做法,当时 sendmail 终于能够作为守护进程同时监听多个端口。
Jedi 的方法是使用sendmail.cf
语法创建自定义规则集,其中路由将根据$&{daemon_name}
宏值的值进行更改,并通过DaemonPortOptions('Name=MyServerName')
选项为每个侦听端口实例设置适当的值(由于反引号,必须对此进行编辑)。考虑到您将使用哈希表根据该值查找智能主机,这可能是一个不超过 8 行的代码段。
虽然绝地武士的方法很诱人,但实际上这是一条死路,就像我自己的长的维护 sendmail 自定义规则集的经验表明,自从你编写它以来,每三年你就会把它看作是外星人编写的。
因此,如果您确实想坚持使用 sendmail 并解决您的问题,我建议您坚持使用老式的解决方案:)