У меня есть сервер в моей локальной сети runnnig exim4, настроенный на использование смарт-хоста в глобальной сети следующим образом:
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» не находится в общедоступном DNS для mydomain.com.
Если я отправлю тестовое письмо с помощью сваков:
swaks --tls --auth --to me@mydomain.com --server smtp.mydomain.com:587
он отправляет как username@hostname.mydomain.com, а smtp.mydomain.com говорит:
<~ 235 2.7.0 Authentication successful
~> MAIL FROM:<username@hostname.mydomain.com>
<~ 250 2.1.0 Ok
~> RCPT TO:<me@mydomain.com>
<~* 450 4.1.8 <username@hostname.mydomain.com>: Sender address rejected: Domain not found
~> QUIT
<~ 221 2.0.0 Bye
Но если я попробую --from username@mydomain.com, тогда все в порядке.
Как ни странно, если я попробую использовать bsd-mailx для отправки почты:
mail me@mydomain.com
smtp.mydomain.com отклоняет его с другой ошибкой:
Recipient address rejected: Access denied
Я не уверен, какая часть цепочки вызывает проблему. Казалось бы, самое простое решение - убедиться, что почта отправляется с @ mydomain.com, а не с @ hostname.mydomain.com *, поскольку это то, что делают все другие почтовые клиенты, отправляющие на этот смарт-хост (в том же домене, что и о сервере тоже идет речь) - а как?
*Хотя получатель ошибка адреса отклонена странная
Здесь недостает того, что у Exim есть таблица перезаписи адресов:
/etc/email-addresses
Этот файл позволяет вам указать, какие адреса электронной почты вы хотите, чтобы каждый пользователь системы использовал в своем заголовке From:, в противном случае Exim будет использовать fqdn хоста в качестве домена (часть, следующая за @), из-за чего мой смарт-хост отвергайте их.
Поэтому я добавил в файл следующие строки:
root: username@mydomain.com
username: username@mydomain.com
Я также сделал 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 разрешаются в разные имена хостов для smarthost (как в моем случае), вы должны поместить строку в свой /ext/exim/passwd.client для каждого из них, поскольку Exim может использовать канонический.
Затем я запустил update-exim4.conf и перезапустил Exim.