如何让 LAN 服务器通过智能主机发送出去?

如何让 LAN 服务器通过智能主机发送出去?

我的 LAN 上有一个运行 exim4 的服务器,配置为使用 WAN 上的智能主机,如下所示:

disable_ipv6='true'
dc_eximconfig_configtype='smarthost'
dc_other_hostnames='hostname.mydomain.com'
dc_local_interfaces='127.0.0.1'
dc_readhost='mydomain.com'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.mydomain.com::587'
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool

如果我在此服务器上执行 hostname -f,则会得到 hostname.mydomain.com。但是,“hostname”并不在 mydomain.com 的公共 DNS 中。

如果我使用 swaks 发送测试邮件:

swaks --tls --auth --to [email protected] --server smtp.mydomain.com:587

它发出[电子邮件保护],并且 smtp.mydomain.com 显示:

<~  235 2.7.0 Authentication successful
 ~> MAIL FROM:<[email protected]>
<~  250 2.1.0 Ok
 ~> RCPT TO:<[email protected]>
<~* 450 4.1.8 <[email protected]>: Sender address rejected: Domain not found
 ~> QUIT
<~  221 2.0.0 Bye

但如果我尝试——[电子邮件保护]那就好了。

但奇怪的是,如果我尝试使用 bsd-mailx 发送邮件:

mail [email protected]

smtp.mydomain.com 拒绝该请求并给出不同的错误:

Recipient address rejected: Access denied

我不确定是哪一部分导致了这个问题。似乎最简单的解决方法是确保邮件是从 @mydomain.com 而不是 @hostname.mydomain.com* 发送的,因为所有其他发送到该智能主机的邮件客户端都是这样做的(与相关服务器位于同一个域中)——但是该怎么做呢?

*虽然接受者地址被拒绝错误很奇怪

答案1

这里缺少的部分是 Exim 有一个地址重写表:

/etc/email-addresses

此文件允许您指定希望系统上的每个用户在其发件人:标头中使用的电子邮件地址,否则 Exim 将使用主机的 fqdn 作为域(@ 后面的部分),这导致我的智能主机拒绝它们。

因此我在文件中添加了以下几行:

root: [email protected]
username: [email protected]

我还将 dc_other_hostnames 设为空白,并将 dc_hide_mailname='false',因此我的 Exim 配置如下所示:

disable_ipv6='true'
dc_eximconfig_configtype='smarthost'
dc_other_hostnames=''
dc_local_interfaces='127.0.0.1'
dc_readhost='mydomain.com'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.mydomain::587'
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

还要注意,当 DNS/PTR 记录解析为智能主机的不同主机名时(就像我的情况一样),您应该在 /ext/exim/passwd.client 中为每个主机名添加一行,因为 Exim 可能正在使用规范的主机名。

然后我运行 update-exim4.conf,并重新启动 Exim。

相关内容