我在有线调制解调器 (bresnan communications) 后面设置了一个小型家庭服务器。我希望这个盒子能够发送电子邮件(而不是接收)用于通知等。
我已经做了:
- 我已经安装并配置了 sendmail。
- 我已添加
mail.bresnan.net
为我的SMART_HOST
指令。
我认为问题在于
当我尝试发送电子邮件时,我的邮件日志中收到以下内容:
Dec 22 10:24:17 batcave sendmail[1530]: oBMHOHrs001530: from=aburns,
size=140, class=0, nrcpts=1,
msgid=<[email protected]>,
relay=aburns@localhost
Dec 22 10:24:17 batcave sm-mta[1531]: oBMHOHWZ001531: from=<[email protected]>,
size=397, class=0, nrcpts=1,
msgid=<[email protected]>,
proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Dec 22 10:24:17 batcave sendmail[1530]: oBMHOHrs001530:
to=<[email protected]>, ctladdr=aburns (1000/1000),
delay=00:00:00, xdelay=00:00:00, mailer=relay,
pri=30140, relay=[127.0.0.1] [127.0.0.1],
dsn=2.0.0, stat=Sent (oBMHOHWZ001531 Message accepted for delivery)
Dec 22 10:24:18 batcave sm-mta[1517]: oBMH9mVv001357:
to=<[email protected]>, ctladdr=<[email protected]>
(1000/1000), delay=00:14:30, xdelay=00:00:42, mailer=relay,
pri=300339, relay=pmx0.bresnan.net. [69.145.248.1],
dsn=4.0.0, stat=Deferred: Connection timed out with pmx0.bresnan.net.
您可以看到邮件被我的 sendmail 服务器接受并传送的位置,然后它尝试交给 bresnan 的服务器,但发生了超时。
这就是我的问题所在。精明的读者会注意到,这pmx0.bresnan.net
不是我SMART_HOST
设置的指令。这是MX
bresnan.com/net 域的(外部?)服务器。显然,bresnan 已将其网络配置为无法从其自己的网络内访问此服务器,而必须使用服务器mail.bresnan.net
(我可以连接到该服务器)。问题是我不知道如何告诉 sendmail 使用这个服务器而不是领域。
我尝试过
- 设置主机条目,以便 pmx0 服务器指向邮件 IP 地址。这不起作用,但这样做是有道理的,因为 sendmail 显然正在执行 MX 查询以查找返回 IP 的服务器,因此永远不需要执行“正常”DNS 解析,因此主机文件永远不会参与其中。
修复方法(针对所有外发邮件):
再次感谢 webmin(见下面的注释)帮助我了解这一点。如果您使用方括号输入智能主机,指示 sendmail 不进行 MX 查找,那么:(define('SMART_HOST','[69.145.248.18]')
修复引号->反引号)实际上可以在没有邮件程序表的情况下工作。
修复方法(针对特定域):
如下所述,需要设置mailertable
。但是,正如手册页,您的文件中也需要启用该功能sendmail.mc
。
还请注意,邮件程序路由不会强制 sendmail 使用指定的服务器执行所有操作,它基于收件人的地址。这对我来说其实没问题,因为我只需要发送到几个域(gmail、google 托管和我的工作)。
概括:
- 添加
FEATURE('mailertable')
到您的sendmail.mc
文件。(请注意,第一个引号应该是反引号。 - 创建
/etc/mail/mailertable
文件(参见手册页) - 创建地图文件:
sudo makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
- 重建你的配置
make -C /etc/mail
- 重新启动sendmail:
service sendmail restart
笔记:我高度建议使用 WebMin 来编辑/重建这些文件。如果没有它,我肯定会疯狂地试图找出为什么我的 mailertable 文件被忽略了。
答案1
您可以通过在 sendmail 文件中添加一个简短的条目来解决 MX 查找问题/etc/mail/mailertable
。
该文件的内容可能应该只有一行,例如:
bresnan.net esmtp:[69.145.248.18]
保存文件并重新启动 sendmail(或者,如果必须手动完成,则重建 sendmail.cf)。