Сегодня мы наконец настроим почтовый сервер Exim (версии 4) для одного распространенного сценария использования, который, к сожалению, последовательно, хотя и не без причины, игнорируется разработчиками дистрибутивов.
Exim выбран почтовым сервером по умолчанию в Debian и в производных от него дистрибутивах. Если вам уже приходилось устанавливать Exim, то, вероятно, вы имели дело с одним из таких дистрибутивов и системой конфигурации, в которой предусмотрен вариант "отправка почты через smarthost". Для домашнего пользователя таким smarthost ("умным" хостом) обычно будет крупный сервис электронной почты вроде Gmail. В корпоративной сети, возможно, будет свой "умный" хост.
Проблема: smarthost в стандартной конфигурации может быть только один. Некуда вписать пароли от всех ваших учетных записей на Gmail, Mail.ru, Яндекс и так далее и заставить Exim самостоятельно отправлять ваши письма на нужный сервис в зависимости, например, от обратного адреса.
Разумеется, Exim сам по себе способен сделать с почтой все, что угодно, вопрос только в конфигурации. К сожалению, простого и, что самое главное, общепринятого решения этой проблемы не придумано. Можно найти некоторые предложения 1 , 2 , 3 , 4, но все они страдают определенными ограничениями.
Решение. Ниже показан вариант, требующий минимальных изменений в стандартной конфигурации. При этом все ее возможности сохраняются. Способ настройки рассчитан на систему конфигурации Exim4 в Debian с раздельными файлами. Полученную конфигурацию можно использовать и на домашнем компьютере, и на облачном сервере для отправки уведомлений от различных сервисов и так далее.
Впишите в файл inventory
адрес настраиваемой машины и имя
пользователя, от которого будет работать Ansible. Разумеется, этот
пользователь должен иметь возможность становиться root
.
Впишите в раздел vars
файла exim-conf-debian.yaml
данные для
доступа к smarthost-серверу, который будет использоваться по
умолчанию, если среди правил отправки не найдется
подходящего. Образец:
vars:
смартхост: smtp.mail.ru
логин: AzureDiamond@mail.ru
пароль: hunter2
Откройте файл 40_smarthosts.j2
и посмотрите, нет ли там готовых
конфигураций для нужных вам провайдеров. Если нет, впишите
свою конфигурацию.
Откройте файл smarthosts.j2
и посмотрите, нет ли там готовых правил
для отправки почты. Если нет, впишите свои правила. Пример:
user1:mailru
*@inbox.ru:mailru
При желании, добавьте локальных пользователей в файл passwd.j2
. По
умолчанию там будет только один пользователь с тем же логином и
паролем, что используется для доступа к smarthost-серверу по умолчанию
(см. выше). Пользователей можно будет добавить позже с помощью скрипта
/usr/share/doc/exim4-base/examples/exim-adduser
или
вручную. См. man exim4-config_files
, раздел /etc/exim4/passwd
.
Впишите логины и пароли для отправки почты на SMTP-серверы нужных вам
провайдеров в passwd.smarthosts.j2
. Пример:
# Для Яндекс Почты логином служит часть адреса до @
AzureDiamond@ya.ru:AzureDiamond:hunter2
Запустите скрипт.
ansible-playbook exim-conf-debian.yaml -i inventory
Отправлять тестовые письма удобно с помощью Swaks. Пример:
swaks -tls -a \
--to user@example.com \
--from <ваш адрес> \
--server localhost \
--auth-user <ваш логин на *локальном* сервере> \
--auth-password <ваш пароль на *локальном* сервере>
Изучите сообщения об ошибках и доработайте напильником.
1 exim: select smarthost according to sender address
2 [Pkg-exim4-users] selecting smarthost based on sender address