设置如下(Ubuntu 9.10):
eth0:1.1.1.1 名称.isp.com
eth0:0 2.2.2.2 example2.com
eth0:1 3.3.3.3 example3.com
example2.com
并且example3.com
是需要向用户发送电子邮件的网络应用程序。
2.2.2.2
指向example2.com
,反之亦然 (A/PTR)。MX -> Google。Google 处理所有收到的邮件。
3.3.3.3
指向example3.com
,反之亦然 (A/PTR)。MX -> Google。Google 处理所有收到的邮件。
要求:
必须禁用本地传送(必须传送到 MX 指定的服务器),以便以下操作有效(请注意,机器上没有本地用户
bob
,但存在现有的 bob 电子邮件用户):echo "Test" | mail -s "Test 6" [email protected]
我需要能够在发送电子邮件时指定从哪个 IP/域名发送电子邮件。
我与 sendmail 进行了斗争,但运气不佳。
以下是一些调试信息:
sendmail -d0.12 -bt < /dev/null
Canonical name: name.isp.com
UUCP nodename: host
a.k.a.: example2.com
a.k.a.: example3.com
...
Sendmail 总是使用规范名称(取自 eth0)。我发现它无法选择 UUCP 代号之一。它使用它来发送电子邮件:
echo -e "To: [email protected]\nSubject: Test\nTest\n" | sendmail -bm -t -v
[email protected]... Connecting to [127.0.0.1] via relay...
220 name.isp.com ESMTP Sendmail 8.14.3/8.14.3/Debian-9ubuntu1; Wed, 31 Mar 2010 16:33:55 +0200; (No UCE/UBE) logging access from: localhost(OK)-localhost [127.0.0.1]
>>> EHLO name.isp.com
我对其他 SMTP 解决方案没意见。我简单了解了 nbsmtp、msmtp 和 nullmailer,但我不确定它们能否处理禁用本地传送和发送电子邮件时选择不同域的问题。
我也知道使用欺骗发件人字段,但它似乎是一个半解决方案(邮件仍然从 isp.com 域而不是正确的 example2.com 发送,因此 PTR 记录未使用,并且被标记为垃圾邮件/垃圾邮件发送者的风险更大)。mail -a "From: <[email protected]>"
答案1
我不知道sendmail
,但exim
您可以指定路由器和传输。路由器接收电子邮件的发件人/收件人地址并决定使用哪种传输。对于 (1),只需创建 smtp 传输,无需本地传输。对于 (2),您可以interface
在创建传输时指定一个选项。配置文件应该是这样的(不是完整的配置文件,未经测试):
begin routers
example2_route:
driver = dnslookup
condition = ${eq{$sender_address_domain}{example2.com}} # 'from' domain is example2.com
transport = example2_smtp
example3_route:
driver = dnslookup
condition = ${eq{$sender_address_domain}{example3.com}}
transport = example3_smtp
begin transports
example2_smtp:
driver = smtp
interface = 2.2.2.2
example3_smtp:
driver = smtp
interface = 3.3.3.3
答案2
答案3
我已按照您描述的方式设置了多个 postfix 实例,以便为两个命名空间提供外发邮件服务。这是一个相当复杂的过程(对我来说更复杂,因为我也是 DKIMProxy 签名者),但一个好的起点是:http://advosys.ca/papers/email/58-postfix-instance.html
我记录了整个过程(在 RHEL 5.6 上),以便提供更多细节,所以如果您要走这条路,请告诉我 - 我可以提供更多信息。
Dan 发布的 Exim 方法看起来更简洁 - 我坚持使用 postfix/DKIMProxy,因为我过去曾使用过这种方法。
干杯