我试图设置一个电子邮件服务器,以便能够从多个IP地址发送电子邮件,所以我们的营销系统可以从多个域发送电子邮件,同时保持反向DNS查找一致。 IE,domain1.comparsing为10.0.0.1,domain2.comparsing为10.0.0.2等
理想情况下,邮件服务器将检查标题中的域,然后从池中select正确的IP地址,将其用于实际发送。 现在我们使用的是Exim,而且我认为一种解决scheme是在不同的接口上运行Exim的多个实例,然后编写一个SMTP代理来执行头部检查并将电子邮件转发到正确的Exim实例。我认为可能有比这更简单的解决scheme。
大家都知道,这不涉及垃圾邮件,我们拥有我们将使用的所有域和IP地址。
如果我了解你,你在服务器上有邮件,那个服务器上有4个IP地址。 您希望邮件服务器在发送到Internet时使用这四个IP中的一个作为出站接口。 如果这是错误的解释,请让我知道。
Exim SMTP传输可以configuration为通过不同的接口发送电子邮件。 以硬编码的方式,你可以做到这一点:
routers: send_domaina_com: driver = dnslookup domains = domaina.com transport = domaina_com_smtp send_domainb_com: driver = dnslookup domains = domainb.com transport = domainb_com_smtp send_domainc_com: driver = dnslookup domains = domainc.com transport = domainc_com_smtp send_domaind_com: driver = dnslookup domains = domaind.com transport = domaind_com_smtp TRANSPORTS: domaina_com_smtp: driver = smtp interface = 10.0.0.1 domainb_com_smtp: driver = smtp interface = 10.0.0.2 domainc_com_smtp: driver = smtp interface = 10.0.0.3 domaind_com_smtp: driver = smtp interface = 10.0.0.4
我99.99%以上将工作,但显然是丑陋的。 我认为你需要的所有东西都是dynamic处理的(“接口”是可扩展的)。
为了保持路由的完整性,我想你将不得不将不同的实例绑定到不同的接口(如你所说)
代理服务器并不是真正需要的,你可以简单地使用一个路由器(每个域/来自:匹配),并设置一个条件来规定哪个“主机”通过中继。
从来没有尝试过。 会有兴趣知道它是否工作..
Exim可以根据“From:”标题中的域名发送来自不同IP地址的电子邮件。 没有必要单独硬编码每个域。 remote_smtp传输的接口应该设置如下:
interface = "${lookup{${lc:${domain:${address:$h_from:}}}}lsearch{/etc/exim/domainips}{$value}}"
需要使用以下格式创build域IP对/etc/exim/domainips列表:
domain1.com: 10.0.0.1 domain2.com: 10.0.0.2
另外,如果10.0.0.1的PTRlogging指向domain1.com,那么相应地设置HELO会很好:
helo_data = ${lc:${domain:${address:$h_from:}}}
如果电子邮件是由PHP / Apache发送的,那么无论“From:”标题(例如apache@primary_hostname.com),实际的信封发送者将始终是相同的。 为了解决这个问题,可以设置return_path:
return_path = ${address:$h_from:}
理想情况下, remote_smtp传输将如下所示:
remote_smtp: driver = smtp interface = "${lookup{${lc:${domain:${address:$h_from:}}}}lsearch{/etc/exim/domainips}{$value}}" helo_data = ${lc:${domain:${address:$h_from:}}} return_path = ${address:$h_from:}