Назад | Перейти на главную страницу

Когда exim4 отправляет HELO / EHLO, как мне настроить, какое имя хоста он отправляет?

Письма из моей системы отклоняются, когда принимающий сервер выполняет проверку HELO. Я считаю, что моя система отправляет неправильное доменное имя. Я использую exim4. Поиск в Google чего-либо о exim4 и доменах дает кошмарный список нерелевантных результатов. Точно так же поиск в Google отказов HELO дает толпу пользователей Outlook, которым необходимо включить аутентификацию SMTP. Я не могу, хоть убей, разобраться в этом простом вопросе: какое имя хоста отправляет exim и как его изменить?

К сожалению, я не могу смотреть, что exim отправляет по сети, поэтому у меня нет возможности отладить это самостоятельно. Я надеюсь, что у кого-то была эта проблема и он просто знает :).

Предполагая, что ошибка связана с данными HELO / EHLO, вы хотите использовать параметр helo_data для транспорта smtp. По умолчанию это $ primary_hostname.

remote_smtp:
    driver = smtp
    helo_data = host.example.com

Более подробная информация доступна в руководство.

Если это не так, вы, вероятно, захотите включить несколько примеров сообщений об отказе. Только трехзначный код и строка после него.

Команда

sudo dpkg-reconfigure exim4-config

должен предложить вам использовать основное имя хоста.

В Debian (Lenny) я обнаружил, что вы устанавливаете имя хоста в /etc/hostname но это не распознается до перезагрузки.

$ hostname newhostname

устанавливает его сразу (но теряется при перезагрузке, поэтому вам придется сделать два).

exim4, кажется, сообщает то же самое, что и uname -n, и я обнаружил, что это полезный способ проверить.

Какое имя хоста отправляет exim?

Имя HELO можно найти в журналах exim4. Остановите демон exim4, затем перезапустите его вручную с включенной отладкой:

/usr/sbin/exim4 -bd -d+all 2>&1 | egrep 'HELO|EHLO'

2>&1|egrep 'HELO|EHLO' часть является необязательной, она просто перенаправляет stderr на stdout, а затем передает журнал в egrep, который отфильтрует все, кроме строк, содержащих HELO или EHLO).

Отправьте электронное письмо, и в нем должна быть одна или две строки следующего вида:

SMTP>> EHLO foobar.example.com

Имя HELO foobar.example.com.

Есть также несколько полезных инструментов онлайн-проверки, которые предоставляют эту информацию (и многие другие полезные), например :

  • https://www.mail-tester.com (будьте осторожны, всего 3 бесплатных проверки электронной почты в день);
  • check-auth@verifier.port25.com (бесплатно);
  • mailtest@unlocktheinbox.com (большая часть его отзывов не бесплатна, но для этой цели это так).

Как мне это изменить?

Вместо того, чтобы редактировать транспортный файл, как предлагает Дэвид, я бы предпочел использовать определения констант exim4 (?) И установить имя в /etc/exim4/conf.d/main/00_local_settings (в раздельной конфигурации), например :

REMOTE_SMTP_HELO_DATA=$sender_address_domain

Не забывай бежать update-exim4.conf перед перезапуском exim4.

Я установил primary_hostname […] в /etc/exim4/exim4.conf.template

Как сказал Дэвид, это, вероятно, не лучшая идея. В раздельной конфигурации вы можете установить основное имя хоста, добавив

MAIN_HARDCODE_PRIMARY_HOSTNAME = subdomain.example.com

в /etc/exim4/conf.d/main/00_local_settings. Похоже на то это было бы PRIMARY_HOST_NAME в монолитной конфигурации exim4.

Нужная настройка называется primary_hostname.

Для отладки можно использовать

tcpdump -A port 25

смотреть SMTP-трафик в ASCII.