如何配置 sendmail 通过特定服务器进行中继

如何配置 sendmail 通过特定服务器进行中继

我在有线调制解调器 (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设置的指令。这是MXbresnan.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)。

相关内容