У меня есть VPS с экземпляром sendmail, который используется для доставки почты с нескольких сайтов Wordpress, которые я размещаю. Sendmail находится на той же машине, что и сайты Wordpress, и я очень хочу сохранить его таким образом для более быстрой передачи локальной почты. Сервер sendmail прослушивает только локальные соединения и также защищен брандмауэром от входящих соединений.
Два моих клиента используют G-Suite, а один - Office 365. Оба из них могут принимать почту для ретрансляции, при условии, что они настроены на доверие IP-адресу отправляющего устройства. Другие отправляют напрямую и вносят этот сервер в белый список в своих записях SPF.
Можно ли настроить sendmail на автоматическое прослушивание дополнительных портов, а затем на smarthost почту, отправляемую через определенный порт, на конкретную службу?
G-Suite имеет одну точку ретрансляции (smtp-relay.gmail.com), тогда как каждый домен O365 имеет свой собственный уникальный домен example-com.mail.protection.outlook.com. Я не возражаю против настройки каждой комбинации порта / смарт-хоста, но хочу знать, возможно ли это, и если да, то как это настроить.
Например:
Затем я бы настроил каждый из экземпляров отправки почты для связи с определенным портом:
Что ж, в основном есть три способа справиться с этой проблемой, как обычно, лучший, олдскульный и джедайский :). Лучший способ - окончательно выбросить sendmail в 2018 году и начать использовать postfix или exim, где маршрутизацию почты можно было бы легче настроить.
Старый способ - и, вероятно, тот, который вы ищете, - это создание отдельных sendmail.cf
файлы для каждого входящего порта, который вы хотите использовать, указав порт прослушивания и соответствующий смарт-хост в каждом из них, и запустить разные sendmail
демоны с каждым. Это было то, что было до 8.10, когда sendmail наконец смог прослушивать несколько портов одновременно в качестве демона.
Способ джедаев - создать собственный набор правил, используя sendmail.cf
синтаксис, в котором маршрутизация будет изменена в зависимости от значения $&{daemon_name}
значение макроса и установите соответствующее значение для каждого экземпляра порта прослушивания через DaemonPortOptions('Name=MyServerName')
вариант (пришлось отредактировать это из-за обратных кавычек). Вероятно, это будет участок кода длиной не более 8 строк, учитывая, что вы будете использовать хэш-таблицу для поиска смарт-хоста на основе этого значения.
Хотя подход джедаев заманчив, на самом деле это тупик, как и я длинный опыт поддержки пользовательских наборов правил для sendmail показывает, что каждые три года с момента написания вы будете смотреть на него так, как если бы он был написан пришельцами.
Так что, если вы действительно хотите придерживаться sendmail и решить вашу проблему, я бы рекомендовал вам придерживаться решения старой школы :)