Вопрос или проблема
Я использовал sendmail для отправки писем с использованием доступного внутреннего почтового сервера. Но в настоящее время порт 25 заблокирован по соображениям безопасности.
Я хочу узнать, есть ли способ указать номер порта в утилите sendmail. Я пытаюсь использовать защищённый SMTP-MSA порт 587 в качестве альтернативы, предположив, что я смогу открыть этот порт.
Я не смог найти ничего в мануалах по sendmail. Есть ли какая-либо альтернатива, которая могла бы это сделать?
Если не указано иное, почта будет отправляться через порт 25.
Вы можете направлять почту, используя другие порты или даже другие протоколы, кроме SMTP, но это обычно будет работать только в пределах вашей сети. Почтовые серверы ваших предполагаемых получателей, скорее всего, будут принимать входящие письма только через SMTP на порту 25.
Например, когда я настраиваю sendmail для прослушивания порта 587, он обычно принимает входящие письма через этот порт только после аутентификации пользователя.
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')
Большинство сетей, которые ограничивают входящий и/или исходящий SMTP-трафик (хорошая и распространённая практика как для потребительских ISP, так и для корпоративных сетей для предотвращения открытых почтовых ретрансляторов, спама и других злоупотреблений), предоставляют серверы ретрансляции, которые позволяют вам отправлять почту, но не без ограничений. Серверы ретрансляции могут проверять содержимое (вирусы, спам) или применять политики (добавление стандартного отказа, архивирование сообщений для соблюдения норм, ограничение получателей) и т.д.
Если вам предоставлен сервер ретрансляции; в sendmail это называется смарт-хостом и настраивается в
# sendmail.mc
define(`SMART_HOST',`relay.example.com`)dnl
Если ваш сервер ретрансляции прослушивает порт 587, это будет выглядеть так:
# sendmail.mc
define(`SMART_HOST',`relay.example.com')dnl
define(`RELAY_MAILER',`esmtp')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
Предполагается, что sendmail пересылает весь ваш почтовый трафик на ретрансляцию, что транспортирует сообщения к предполагаемым получателям, и сервер ретрансляции не требует аутентификации.
Вы можете уточнить маршрутизацию почты с помощью mailertable.
Чтобы направить некоторые домены электронной почты на один удалённый TCP порт, а почту для других доменов на другой, необходимо внести некоторые изменения в sendmail.cf для настройки нового почтового маршрутизатора. Скопируйте настройки существующего esmtp маршрутизатора и добавьте номер порта:
# sendmail.cf
# <snip>
Mesmtp587, P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=TCP $h 587
Mesmtp2525, P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\n, L=990,
T=DNS/RFC822/SMTP,
A=TCP $h 2525
Транспортный канал esmtp587
теперь будет доставлять на порт 587 вместо порта 25 или аналогично на 2525 или любой другой альтернативный порт, который вы укажете.
Затем в вашем mailertable:
example.com esmtp587:example.com
example2.com esmtp2525:example2.com
Строка выше позволит sendmail искать MX записи для example.com; если только один (ретранслятор) SMTP сервер для example.com поддерживает нестандартный порт, синтаксис станет:
example.com esmtp587:[smtp.example.com]
Квадратные скобки говорят sendmail игнорировать возможные MX записи для smtp.example.com и маршрутизировать всю почту для @example.com на smtp.example.com:587.
Записи файла sendmail.mc:
dnl Измените ретрансляционный почтовый маршрутизатор, чтобы он подключался к порту 587 вместо 25
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
dnl Определите ретрансляцию для не локальных писем
dnl Используйте [] для отключения поиска MX записей
define(`SMART_HOST', `relay:[name.of.smart.host]')dnl
Sendmail FAQ 3.39 : Как отправить с помощью альтернативного порта?
П.С. Вы можете использовать FEATURE(mailertable), чтобы указать разные ретрансляторы для определённых не локальных доменов электронной почты.
Ответ или решение
Для использования порта 587 с утилитой Sendmail необходимо внести изменения в конфигурационные файлы, так как по умолчанию Sendmail использует порт 25 для передачи почты. Порт 587 — это порт для защищенной передачи электронной почты через SMTP (MSA), который часто используется для отправки почты с необходимой аутентификацией.
Шаги для настройки Sendmail для использования порта 587:
-
Настройка смарт-хоста: Если ваш провайдер или сервер принимает почту на порту 587, можно настроить Sendmail для использования этого порта с помощью смарт-хоста. Для этого откройте файл конфигурации вашего Sendmail, обычно это
sendmail.mc
, и добавьте следующие строки:dnl Определите смарт-хост, который будет использоваться для отправки почты define(`SMART_HOST', `relay:[имя.смарт.хоста]')dnl
Замените
имя.смарт.хоста
на имя вашего SMTP-сервера. -
Изменение параметров реле: Так как мы хотим использовать порт 587, необходимо также изменить параметры реле. Добавьте следующую строку в файл
sendmail.mc
:define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
-
Обновление конфигурации: После внесения изменений в
sendmail.mc
, вам нужно скомпилировать его вsendmail.cf
. Это можно сделать с помощью следующей команды:m4 sendmail.mc > sendmail.cf
-
Перезапуск Sendmail: Чтобы изменения вступили в силу, перезапустите службу Sendmail:
systemctl restart sendmail
Пример полной конфигурации в sendmail.mc
:
dnl Определение смарт-хоста
define(`SMART_HOST', `relay:[имя.смарт.хоста]')dnl
dnl Изменение параметров реле для подключения к порту 587
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
Использование mailertable для настройки пересылки по различным доменам:
Если вам нужно отправить почту для разных доменов через разные SMTP-серверы на альтернативных портах, вы можете использовать mailertable
. Для этого:
-
Откройте файл
mailertable
и добавьте строки для соответствующих доменов. Например:пример.com esmtp587:[smtp.пример.com] пример2.com esmtp2525:[smtp.пример2.com]
Здесь
esmtp587
иesmtp2525
— это ваши определенные методы пересылки, указывающие на порты 587 и 2525 соответственно. -
Включите функциональность mailertable в вашем конфигурационном файле
sendmail.mc
:FEATURE(mailertable)dnl
Заключение
После выполнения всех вышеперечисленных шагов, ваш Sendmail должен быть настроен на использование порта 587 для отправки почты. Не забывайте, что отправка почты через или получением через другие порты может зависеть от конфигурации вашего ПК, сетевых настроек и прав доступа к серверу.