Почему письма через Sendmail уходят медленно и как чинить
Sendmail до сих пор стоит на многих серверах: когда-то настроили, и он не мешал. Потом письма «думают» 20-60 секунд (или дольше), будто SMTP на модеме. Ниже – типичные причины задержки на отправке и проверки, которые обычно возвращают нормальную скорость.
Где задержка: у вас или у получателя
В логах Sendmail смотрите поля delay=, xdelay=, mailer=, stat=. Они показывают, сколько ушло на обработку и на разговор с удаленным SMTP.
tail -f /var/log/maillog # на Debian/Ubuntu часто: # tail -f /var/log/mail.log
Если delay растет еще до соединения с MX – чаще DNS, hostname или локальный конфиг. Если большой xdelay и mailer=esmtp – упираетесь в удаленную сторону (greylisting, медленные ответы, антиспам).
Причина 1. DNS тормозит
Sendmail активно ходит в DNS: MX, A/AAAA, иногда reverse. Если резолвер отвечает через раз, «доставка черепахой» почти гарантирована.
dig +time=2 +tries=1 MX example.com dig +time=2 +tries=1 A example.com dig +time=2 +tries=1 AAAA example.com
Если запросы «думают» секунды или падают по таймауту – это уже объясняет задержки. Что делать:
- привести в порядок
/etc/resolv.conf(рабочие DNS, лучше два адреса) - если systemd-resolved – проверить, что он реально резолвит
resolvectl status resolvectl query example.com
Причина 2. Hostname резолвится криво
У сервера есть hostname, но он не резолвится в IP (или резолвится через «сонный» DNS). Sendmail пытается получить FQDN и теряет время на каждом письме.
hostname hostname -f getent hosts "$(hostname)" getent hosts "$(hostname -f)"
Если hostname -f зависает или врет – пропишите связку в /etc/hosts:
127.0.0.1 localhost 127.0.1.1 mail.example.com mail # плюс внешний IP -> FQDN, если так принято в вашей схеме
Причина 3. Нет PTR или rDNS «левый»
Часть почтовиков не рубит сразу, а тормозит соединение, пока проверяет reverse DNS, репутацию, HELO. Проверка:
# подставьте внешний IP сервера dig +short -x 203.0.113.10 host 203.0.113.10
PTR настраивается у провайдера/хостинга. Желательно: PTR указывает на нормальное имя, а у имени есть A-запись обратно на этот IP.
Причина 4. IPv6: AAAA есть, маршрута нет
У домена получателя есть AAAA, сервер пытается IPv6, а IPv6 у вас сломан или отсутствует. Тишина 20-30 секунд, потом fallback на IPv4 – снаружи «Sendmail тормозит».
dig +short MX example.com dig +short AAAA example.com # тест SMTP (подставьте реальный MX) nc -vz mx.example.com 25
Либо чините IPv6, либо не заставляйте сервисы ходить туда, где ничего не работает. На почте это часто экономит десятки секунд на письме.
Причина 5. Greylisting и антиспам у получателя
Иногда проблема не у вас: временный отказ (451/421), «try again later». Sendmail кладет письмо в очередь и пробует позже.
mailq sendmail -bp # ручной прогон очереди с подробностями sendmail -q -v
Тут лечится репутацией, корректным rDNS/HELO, SPF/DKIM, иногда просто временем. Это уже не «баг Sendmail», а политика принимающей стороны.
Что подкрутить в Sendmail
Если DNS и hostname в порядке, но часть хостов «висит» на connect, снизьте таймаут соединения. В sendmail.mc:
define(`confTO_CONNECT', `5s')dnl
5 секунд – удобная диагностическая планка. На нестабильной сети можно 10-15 с. 1-2 с обычно вредны: начнутся ложные недоставки.
cd /etc/mail m4 sendmail.mc > sendmail.cf systemctl restart sendmail || service sendmail restart
Меняйте один параметр за раз, шлите тестовое письмо, смотрите лог. Иначе потом разбирать будет сложнее, чем чинить.
Очередь mqueue
Если в /var/spool/mqueue гора старых писем, Sendmail тратит время на ретраи, и свежая почта кажется медленной. Смотрите mailq, разбирайте «мертвяк» на несуществующие домены, не кормите бесконечные попытки.
Быстрый чеклист
hostname -fотрабатывает мгновенноdig MXиdig -xне «думают» по 5-10 секунд- PTR для внешнего IP есть и выглядит прилично
- в логах смотрите
delay/xdelay– быстрее любых догадок - тормоза только на первом письме к домену – часто greylisting
Итог
Медленная отправка через Sendmail почти всегда сводится к DNS/hostname на вашей стороне или к «воспитательным» задержкам у получателя. Начинайте с логов и резолвинга, а не с правок sendmail.cf наугад.
Если Sendmail держится на исторической инерции, Postfix часто спокойнее в сопровождении. Не потому что «моднее», а потому что почта должна быть сервисом, а не археологией.