![如何让 LAN 服务器通过智能主机发送出去?](https://linux22.com/image/713962/%E5%A6%82%E4%BD%95%E8%AE%A9%20LAN%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%9A%E8%BF%87%E6%99%BA%E8%83%BD%E4%B8%BB%E6%9C%BA%E5%8F%91%E9%80%81%E5%87%BA%E5%8E%BB%EF%BC%9F.png)
我的 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。