Почта не отправляется: письма остаются в очереди
Почта от служб — это уведомления о сбоях, письма от заданий cron, отчёты. Если очередь растёт, уведомления не доходят, и о проблемах никто не узнаёт. Причина обычно в блокировке исходящего порта или в неверной настройке пересылки.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Исходящий порт закрыт
Провайдеры и облачные площадки часто закрывают порт почты для борьбы с рассылками. Соединение не устанавливается, письма откладываются.
-
Пересылка настроена неверно
Неверный адрес сервера пересылки или отсутствующие учётные данные приводят к отказу при отправке.
-
Почтовой службы нет вовсе
Тогда письма от заданий просто теряются, а в журнале появляется сообщение об отсутствии почтовой службы.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Очередь почты и причины задержек.
mailq | tail -10Сообщения о неудачных отправках.
journalctl -u postfix -n 30 --no-pager | grep -iE "deferred|connect"Состояние очереди отправки.
postqueue -p 2>/dev/null | tail -5Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Провайдеры и облачные площадки часто закрывают порт почты для борьбы с рассылками. Соединение не устанавливается, письма откладываются.
- Как проверить
-
Посмотрите очередь и проверьте доступность порта.
mailq 2>/dev/null | tail -5 timeout 5 bash -c "</dev/tcp/smtp.example.org/587" && echo открыт || echo закрыт
- Как исправить
- Настройте пересылку через сервер провайдера по разрешённому порту с аутентификацией.
- Почему происходит
- Неверный адрес сервера пересылки или отсутствующие учётные данные приводят к отказу при отправке.
- Как проверить
-
Посмотрите настройки пересылки.
postconf relayhost smtp_sasl_auth_enable 2>/dev/null
- Как исправить
- Проверьте адрес сервера и учётные данные. Многие серверы требуют аутентификации и шифрования.
- Почему происходит
- Тогда письма от заданий просто теряются, а в журнале появляется сообщение об отсутствии почтовой службы.
- Как проверить
-
Посмотрите, установлена ли почтовая служба.
command -v sendmail postfix 2>/dev/null; systemctl is-active postfix 2>/dev/null
- Как исправить
-
Либо установите минимальную пересылку, либо откажитесь от почтовых уведомлений: для задач под systemd надёжнее оповещение через
OnFailure=.
Пример вывода
Письма откладываются: порт закрыт. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
postfix/smtp[4300]: connect to smtp.example.org[<адрес>]:25: Connection timed out
postfix/smtp[4300]: 4C2A1: to=<admin@example.org>, relay=none, delay=1201, status=deferred (connect to smtp.example.org: Connection timed out)
Связанные ошибки
- Connection timed out в журнале службы Соединение не устанавливается по таймауту: пакеты отбрасываются, узел недоступен, перегружен сервер на другой стороне.
- Таймер срабатывает, но задача падает незаметно Таймер работает исправно, а задача каждый раз завершается ошибкой, и об этом никто не узнаёт. Как настроить оповещение через OnFailure.
- Задача cron не выполняется Задача в crontab не запускается: короткий PATH, права на файл задачи, точка в имени файла, отсутствие перевода строки.
- Address already in use при запуске службы Порт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Broken pipe в журнале службы Запись в закрытый канал или соединение: клиент отключился, обработчик завершился, конвейер разорван.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
- Connection refused в журнале службы Соединение отклонено: служба не может подключиться к базе, кешу или другому сервису. Порядок запуска, адрес, брандмауэр.
Где встречается чаще всего
Источники
- Документация Postfix
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено блокировкой исходящего порта почты.