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

Ere*_*Bat 12 linux sendmail

我的电缆调制解调器(bresnan 通信)后面有一个小型家庭服务器设置。我希望能够让这个框发送电子邮件(不接收)通知和诸如此类。

我已经做了什么:

  • 我已经安装并配置了sendmail。
  • 我已添加mail.bresnan.net为我的SMART_HOST指令。

我相信问题是

当我尝试发送电子邮件时,我在邮件日志中收到以下信息:

Dec 22 10:24:17 batcave sendmail[1530]: oBMHOHrs001530: from=aburns, 
  size=140, class=0, nrcpts=1, 
  msgid=<201012221724.oBMHOHrs001530@bresnan.net>, 
  relay=aburns@localhost
Dec 22 10:24:17 batcave sm-mta[1531]: oBMHOHWZ001531: from=<aburns@bresnan.net>, 
  size=397, class=0, nrcpts=1,
  msgid=<201012221724.oBMHOHrs001530@bresnan.net>,
  proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Dec 22 10:24:17 batcave sendmail[1530]: oBMHOHrs001530:
  to=<my@work-address.com>, 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=<my@work-address.com>, ctladdr=<aburns@bresnan.net>
  (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.
Run Code Online (Sandbox Code Playgroud)

您可以看到我的 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、谷歌托管和我的工作)。

总结

  • 添加FEATURE('mailertable')到您的sendmail.mc文件中。(请注意,第一个引号应该是反引号。
  • 创建您的/etc/mail/mailertable文件(参见手册页
  • 创建映射文件: sudo makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
  • 重建你的配置 make -C /etc/mail
  • 重新启动发送邮件: service sendmail restart

注意:强烈建议使用 WebMin 来编辑/重建这些文件。如果没有它,我会发疯地试图找出为什么我的 mailertable 文件被忽略了。

eww*_*ite 8

您可以通过在 sendmail/etc/mail/mailertable文件中添加一个简短的条目来绕过 MX 查找。

文件的内容可能应该只有一行,例如:

bresnan.net       esmtp:[69.145.248.18]
Run Code Online (Sandbox Code Playgroud)

保存文件并重新启动 sendmail(或者如果必须手动完成,则重建您的 sendmail.cf)。

  • 你的回答是正确的;但是我不得不采取一些额外的步骤。对于遇到此问题的其他人,请参阅我上面的编辑。 (2认同)