Проблемы с отправкой почты через Sendmail: почему долго уходит и как решить

Почему письма через Sendmail уходят медленно и как чинить

Sendmail до сих пор стоит на многих серверах: когда-то настроили, и он не мешал. Потом письма «думают» 20-60 секунд (или дольше), будто SMTP на модеме. Ниже – типичные причины задержки на отправке и проверки, которые обычно возвращают нормальную скорость.

Диагностика медленной отправки почты через Sendmail

Где задержка: у вас или у получателя

В логах 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 часто спокойнее в сопровождении. Не потому что «моднее», а потому что почта должна быть сервисом, а не археологией.

Источники и ссылки


Комментарии загружаются…