Почему не отправляется почта с сервера? Пошаговая диагностика — IT Аптека

💊 Диагноз: сервер молчит, письма не уходят, ты в панике

Значит, снова эта классика. Настроил рассылку, форму обратной связи, или просто переехал на новый VPS — и тишина. Письма не уходят. В логах — какая-то каша из «deferred», «relay denied» и «connection refused». Клиент уже пишет, что «не получает письма». Коллеги смотрят на тебя с немым вопросом.

Хорошая новость: это лечится. И лечится быстро, если знать, куда смотреть.

Что ты получишь после этого рецепта
  • Понимание — почему вообще не уходит почта с сервера (причины по пунктам)
  • Пошаговый чеклист диагностики — от порта до DNS
  • Готовые команды для Postfix, Exim, sendmail — скопировал и вставил
  • Скрипт автоматической диагностики SMTP — один запуск, полный расклад
  • Чеклист «что делать, если ничего не помогло»

Состав рецепта:

  1. Причины: почему сервер не отправляет email
  2. Диагностика порта 25, 587, 465
  3. Проверка очереди Postfix / Exim
  4. Проверка DNS: SPF, DKIM, DMARC, PTR
  5. Тест SMTP через telnet и openssl
  6. Скрипт комплексной диагностики
  7. Осложнения и их лечение
  8. Профилактика: как не попасть в эту ситуацию снова



🔬 Причины: почему не уходит почта с Linux-сервера

Перед тем как лезть в конфиги, давай обозначим врага. Проблемы с отправкой почты с сервера делятся на пять групп. Почти всегда это одна из них:

1. Заблокирован порт 25 провайдером или файрволом

Самая частая причина, особенно на новых VPS. AWS, Hetzner, DigitalOcean, «Selectel» и многие другие по умолчанию блокируют исходящий порт 25 — против спама. Твой Postfix исправно пытается отправить письмо, а на уровне сети его уже зарубили.

2. Неправильно настроен или сломан почтовый агент (MTA)

Postfix не запущен. Exim не слушает нужный интерфейс. Sendmail вообще не установлен, а PHP mail() шлёт в пустоту. Конфиг сломан после апдейта. Очередь завалена и заморожена.

3. Проблемы с DNS: SPF, DKIM, DMARC, PTR

Письмо уходит с сервера, но принимающая сторона (Gmail, Outlook) его отбивает или кидает в спам. SPF-запись не включает IP сервера. DKIM-подпись не совпадает. PTR-записи нет — сервер «анонимный», и это красный флаг для всех серьёзных почтовых систем.

4. IP-адрес сервера в чёрном списке (blacklist)

Предыдущий арендатор VPS с этого IP рассылал спам. Или ты сам случайно отправил пару тысяч писем в цикле. Теперь твой IP в DNSBL, и письма молча отбиваются.

5. Проблемы аутентификации SMTP

SASL auth не настроен. TLS/STARTTLS не работает. Приложение пытается подключиться без авторизации, а relay запрещён для неаутентифицированных клиентов. Итог: «relay access denied» или «authentication required».

Важно: Почти в 80% случаев виноваты пункты 1 и 3. Начни с них — сэкономишь час жизни.



💉 Рецепт: пошаговая диагностика SMTP-сервера

Подготовка

Тебе нужен root или sudo на сервере, и минута терпения. Дополнительно установи утилиты, если их ещё нет:

# Debian/Ubuntu
apt-get install -y telnet openssl mailutils dnsutils curl

# CentOS/RHEL/Rocky
yum install -y telnet openssl mailx bind-utils curl

Зафиксируй IP своего сервера — он понадобится на каждом шаге:

curl -s https://api.ipify.org && echo
# Или так:
ip route get 8.8.8.8 | awk '{print $7; exit}'

Шаг 1. Проверь — вообще запущен ли почтовый сервер

Это смешно, но 20% случаев именно так и выглядит: Postfix просто не работает после перезагрузки или падал тихо в ночи.

Postfix:

systemctl status postfix
# Смотри на строку "Active: active (running)"
# Если нет — запускаем:
systemctl start postfix
systemctl enable postfix

Exim:

systemctl status exim4    # Debian/Ubuntu
systemctl status exim     # CentOS

# Запустить, если не работает:
systemctl start exim4
systemctl enable exim4

Проверь, слушает ли MTA нужный порт:

ss -tlnp | grep -E ':(25|587|465)'
# Должно быть что-то вроде:
# LISTEN 0 100 0.0.0.0:25 ...

Если строки нет — MTA не слушает порт. Либо не запущен, либо конфиг не тот.

Шаг 2. Проверь порты: открыты ли они для исходящего трафика

Короче, порт 25 — это классика, которую режут все подряд. Проверяй снаружи и изнутри.

Проверь исходящий 25-й порт с сервера:

# Пробуем подключиться к MX-серверу Google через порт 25
telnet aspmx.l.google.com 25
# Если "Connected to aspmx.l.google.com" — порт открыт.
# Если "Connection refused" или timeout — провайдер режет.
# Альтернатива через curl (без интерактива):
curl -v telnet://aspmx.l.google.com:25 2>&1 | head -20

Проверь порт 587 (submission, с авторизацией):

telnet smtp.gmail.com 587
# Для собственного сервера:
telnet localhost 587

Проверь файрвол на сервере:

# UFW (Ubuntu):
ufw status verbose

# iptables:
iptables -L -n --line-numbers | grep -E "smtp|25|587"

# firewalld (CentOS/Rocky):
firewall-cmd --list-all

Если порт 25 заблокирован провайдером:

Что делать: Открой тикет провайдеру с просьбой разблокировать порт 25 (объясни, что ты легальный отправитель). Или переключайся на Smart Host / SMTP Relay через порт 587 — это вообще правильнее для большинства задач.

Настройка Postfix для отправки через внешний relay (например, SendGrid, Mailgun, Gmail SMTP):

# /etc/postfix/main.cf — добавь или измени:
relayhost = [smtp.sendgrid.net]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
# Создай файл с паролем:
echo "[smtp.sendgrid.net]:587 apikey:ТУТ_ТВОЙ_API_KEY" > /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

# Перезапусти:
systemctl reload postfix

Шаг 3. Проверь очередь писем

Письма могут быть застряли в очереди. «Deferred» — это не ошибка, это «попробуем позже». Смотрим:

Postfix — просмотр очереди:

# Показать всю очередь:
mailq
# Или:
postqueue -p

# Сколько писем в очереди:
postqueue -p | tail -1

# Посмотреть конкретное письмо (по ID из mailq):
postcat -q ИДЕНТИФИКАТОР_ПИСЬМА

Принудительно отправить всё из очереди:

postqueue -f

Удалить все письма из очереди (осторожно!):

postsuper -d ALL

Exim — просмотр и управление очередью:

# Список писем в очереди:
exim -bp

# Количество писем:
exim -bpc

# Принудительно отправить все:
exim -qff

# Удалить конкретное письмо по ID:
exim -Mrm ИДЕНТИФИКАТОР

# Удалить всё из очереди:
exiqgrep -i | xargs exim -Mrm

Смотри логи — там ответ почти всегда:

# Postfix (последние 100 строк):
tail -100 /var/log/mail.log
# Или:
tail -100 /var/log/maillog

# Фильтруй только ошибки:
grep -i "error\|reject\|deferred\|bounced\|failed" /var/log/mail.log | tail -50

# Exim:
tail -100 /var/log/exim4/mainlog
grep -i "fail\|reject\|error" /var/log/exim4/mainlog | tail -50

Шаг 4. Проверь DNS: SPF, DKIM, DMARC, PTR

Это тот раздел, который все пропускают — и потом удивляются, почему письма летят в спам или не доходят вообще.

Проверь PTR-запись (обратный DNS):

# Замени 1.2.3.4 на свой IP:
dig -x 1.2.3.4 +short
# Должно вернуть что-то вроде: mail.yourdomain.com.
# Если пусто — иди к провайдеру и настраивай PTR.
# Проверка через nslookup:
nslookup 1.2.3.4

Проверь SPF-запись:

# Замени yourdomain.com на свой домен:
dig TXT yourdomain.com +short | grep spf
# Должно быть что-то вроде:
# "v=spf1 ip4:1.2.3.4 include:_spf.google.com ~all"

Если IP сервера не включён в SPF — Gmail и Outlook будут отбивать письма. Пример правильной SPF-записи для домена (добавляется как TXT в DNS):

v=spf1 ip4:ТУТ_IP_ТВОЕГО_СЕРВЕРА mx ~all

Проверь DKIM:

# Замени mail._domainkey.yourdomain.com на свой селектор:
dig TXT mail._domainkey.yourdomain.com +short
# Должна вернуться длинная строка с "p=" — это публичный ключ.

Если записи нет — DKIM не настроен. Вот быстрая установка для Postfix + opendkim:

# Установка:
apt-get install -y opendkim opendkim-tools

# Генерация ключей:
mkdir -p /etc/opendkim/keys/yourdomain.com
opendkim-genkey -b 2048 -d yourdomain.com -D /etc/opendkim/keys/yourdomain.com -s mail -v

# Смотри публичный ключ для добавления в DNS:
cat /etc/opendkim/keys/yourdomain.com/mail.txt
# /etc/opendkim.conf — минимальный конфиг:
Domain                  yourdomain.com
KeyFile                 /etc/opendkim/keys/yourdomain.com/mail.private
Selector                mail
Socket                  inet:12301@localhost
# /etc/postfix/main.cf — добавь:
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301
systemctl restart opendkim postfix

Проверь DMARC:

dig TXT _dmarc.yourdomain.com +short
# Должно быть: "v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com"
# p=none — только <a class="wpil_keyword_link" href="https://it-apteka.com/category/monitoring/" target="_blank"  rel="noopener" title="Мониторинг" data-wpil-keyword-link="linked"  data-wpil-monitor-id="1152">мониторинг</a> (для начала безопасно)
# p=quarantine — спам
# p=reject — жёсткий отказ

Минимальная DMARC-запись (добавь в DNS как TXT на _dmarc.yourdomain.com):

v=DMARC1; p=none; rua=mailto:postmaster@yourdomain.com

Онлайн-инструменты для быстрой проверки DNS:

Инструмент Что проверяет URL
MXToolbox SPF, DKIM, DMARC, Blacklist, MX mxtoolbox.com
Mail-tester.com Полный скоринг письма mail-tester.com
DKIM Validator DKIM подпись dkimvalidator.com
Google Postmaster Репутация домена у Gmail postmaster.google.com

Шаг 5. Проверь IP на blacklist

# Быстрая проверка через dig (замени 1.2.3.4 на свой IP):
# Для проверки bl.spamcop.net:
dig 4.3.2.1.bl.spamcop.net

# Для zen.spamhaus.org:
dig 4.3.2.1.zen.spamhaus.org

# Если вернулось 127.0.0.x — ты в списке.
# Если NXDOMAIN — чист.
# Скрипт для проверки по нескольким blacklist сразу:
IP="1.2.3.4"   # <-- Замени на свой IP
REVERSED=$(echo $IP | awk -F. '{print $4"."$3"."$2"."$1}')

LISTS=(
  "zen.spamhaus.org"
  "bl.spamcop.net"
  "dnsbl.sorbs.net"
  "b.barracudacentral.org"
  "dnsbl-1.uceprotect.net"
  "psbl.surriel.com"
)

echo "Проверка IP: $IP"
echo "-----------------------------"
for LIST in "${LISTS[@]}"; do
  RESULT=$(dig +short "${REVERSED}.${LIST}" 2>/dev/null)
  if [ -n "$RESULT" ]; then
    echo "🔴 НАЙДЕН в: $LIST ($RESULT)"
  else
    echo "✅ Чист: $LIST"
  fi
done

Если IP в blacklist — иди на сайт конкретного листа и подай заявку на делистинг. Для Spamhaus — это spamhaus.org/removal. Для Barracuda — lookup.barracudacentral.org.

Шаг 6. Тест SMTP вручную через telnet и openssl

Это самый надёжный способ убедиться, что SMTP работает и аутентификация проходит. Делай руками.

Telnet-тест порта 25 (без шифрования):

telnet localhost 25
# После подключения введи:
EHLO test.yourdomain.com
MAIL FROM:<test@yourdomain.com>
RCPT TO:<получатель@gmail.com>
DATA
Subject: Test mail
Test body
.
QUIT

Тест STARTTLS через openssl (порт 587):

openssl s_client -starttls smtp -connect localhost:587 -crap
# Или для внешнего сервера:
openssl s_client -starttls smtp -connect smtp.gmail.com:587

# После подключения:
EHLO yourdomain.com
AUTH LOGIN
# Введи base64-логин и пароль:
echo -n "твой@email.com" | base64
echo -n "твой_пароль" | base64

Отправь тестовое письмо прямо из командной строки:

# Через sendmail:
echo "Subject: Test\n\nTest body" | sendmail -v получатель@gmail.com

# Через mail:
echo "Test body" | mail -s "Test Subject" получатель@gmail.com

# Через swaks (самый удобный тестировщик SMTP):
apt-get install -y swaks

swaks \
  --to получатель@gmail.com \
  --from отправитель@yourdomain.com \
  --server localhost \
  --port 587 \
  --auth LOGIN \
  --auth-user отправитель@yourdomain.com \
  --auth-password "твой_пароль" \
  --tls \
  --header "Subject: SMTP Test from swaks" \
  --body "Если это письмо пришло — сервер работает. Можно идти спать."

Шаг 7. Скрипт комплексной автодиагностики SMTP

Хватит делать всё по одному. Вот скрипт, который пробегается по всем ключевым точкам и выдаёт отчёт. Скопируй, сохрани, запусти — получишь полный расклад за 30 секунд.

#!/bin/bash
# ================================================
# smtp_diag.sh — Скрипт диагностики SMTP-сервера
# IT Аптека | Рецепт #42
# Использование: sudo <a class="wpil_keyword_link" href="https://it-apteka.com/tag/bash/" target="_blank"  rel="noopener" title="Bash" data-wpil-keyword-link="linked"  data-wpil-monitor-id="1149">bash</a> smtp_diag.sh yourdomain.com 1.2.3.4
# ================================================

DOMAIN=&quot;${1:-yourdomain.com}&quot;
SERVER_IP=&quot;${2:-$(curl -s https://api.ipify.org)}&quot;
REVERSED_IP=$(echo $SERVER_IP | awk -F. &#039;{print $4&quot;.&quot;$3&quot;.&quot;$2&quot;.&quot;$1}&#039;)

RED=&#039;&#92;&#48;33[0;31m&#039;
GREEN=&#039;&#92;&#48;33[0;32m&#039;
YELLOW=&#039;&#92;&#48;33[1;33m&#039;
NC=&#039;&#92;&#48;33[0m&#039;

ok()   { echo -e &quot;${GREEN}✅ OK${NC}   $1&quot;; }
fail() { echo -e &quot;${RED}🔴 FAIL${NC} $1&quot;; }
warn() { echo -e &quot;${YELLOW}⚠️  WARN${NC} $1&quot;; }

echo &quot;========================================&quot;
echo &quot; IT Аптека — Диагностика SMTP&quot;
echo &quot; Домен: $DOMAIN | IP: $SERVER_IP&quot;
echo &quot;========================================&quot;
echo &quot;&quot;

# --- 1. Проверка MTA ---
echo &quot;[ 1/7 ] Почтовый агент (MTA)&quot;
for MTA in postfix exim4 exim sendmail; do
  if systemctl is-active --quiet $MTA 2&gt;/dev/null; then
    ok &quot;$MTA запущен&quot;
    break
  fi
done

# --- 2. Порты ---
echo &quot;&quot;
echo &quot;[ 2/7 ] Порты SMTP&quot;
for PORT in 25 587 465; do
  if ss -tlnp | grep -q &quot;:$PORT &quot;; then
    ok &quot;Порт $PORT слушает&quot;
  else
    warn &quot;Порт $PORT не слушает&quot;
  fi
done

# --- 3. Исходящий порт 25 ---
echo &quot;&quot;
echo &quot;[ 3/7 ] Исходящий порт 25 (к Google MX)&quot;
if timeout 5 bash -c &#039;echo QUIT | telnet aspmx.l.google.com 25 2&gt;&amp;1 | grep -q &quot;220&quot;&#039;; then
  ok &quot;Исходящий порт 25 открыт&quot;
else
  fail &quot;Исходящий порт 25 заблокирован (провайдер или файрвол)&quot;
fi

# --- 4. PTR ---
echo &quot;&quot;
echo &quot;[ 4/7 ] PTR-запись (обратный DNS)&quot;
PTR=$(dig -x $SERVER_IP +short 2&gt;/dev/null)
if [ -n &quot;$PTR&quot; ]; then
  ok &quot;PTR настроен: $PTR&quot;
else
  fail &quot;PTR-запись отсутствует для IP $SERVER_IP&quot;
fi

# --- 5. SPF ---
echo &quot;&quot;
echo &quot;[ 5/7 ] SPF-запись&quot;
SPF=$(dig TXT $DOMAIN +short 2&gt;/dev/null | grep -i &quot;v=spf1&quot;)
if [ -n &quot;$SPF&quot; ]; then
  ok &quot;SPF найден: $SPF&quot;
  if echo &quot;$SPF&quot; | grep -q &quot;$SERVER_IP&quot;; then
    ok &quot;IP сервера включён в SPF&quot;
  else
    warn &quot;IP $SERVER_IP может не быть в SPF — проверь вручную&quot;
  fi
else
  fail &quot;SPF-запись отсутствует для $DOMAIN&quot;
fi

# --- 6. DKIM ---
echo &quot;&quot;
echo &quot;[ 6/7 ] DKIM (селектор &#039;mail&#039;)&quot;
DKIM=$(dig TXT mail._domainkey.$DOMAIN +short 2&gt;/dev/null)
if [ -n &quot;$DKIM&quot; ]; then
  ok &quot;DKIM-запись найдена&quot;
else
  fail &quot;DKIM-запись не найдена (mail._domainkey.$DOMAIN)&quot;
fi

# --- 7. Blacklist ---
echo &quot;&quot;
echo &quot;[ 7/7 ] Проверка Blacklist&quot;
LISTS=(&quot;zen.spamhaus.org&quot; &quot;bl.spamcop.net&quot; &quot;dnsbl.sorbs.net&quot; &quot;b.barracudacentral.org&quot;)
CLEAN=1
for LIST in &quot;${LISTS[@]}&quot;; do
  RESULT=$(dig +short &quot;${REVERSED_IP}.${LIST}&quot; 2&gt;/dev/null)
  if [ -n &quot;$RESULT&quot; ]; then
    fail &quot;IP найден в $LIST&quot;
    CLEAN=0
  else
    ok &quot;Чист: $LIST&quot;
  fi
done

# --- Итог ---
echo &quot;&quot;
echo &quot;========================================&quot;
echo &quot; Диагностика завершена&quot;
echo &quot; Домен: $DOMAIN | IP: $SERVER_IP&quot;
echo &quot; Время: $(date)&quot;
echo &quot;========================================&quot;

Сохрани скрипт и запусти:

chmod +x smtp_diag.sh
sudo bash smtp_diag.sh yourdomain.com 1.2.3.4

Шаг 8. Типичные ошибки в логах и что они значат

Ошибка в логах Что это значит Что делать
relay access denied Постфикс не пускает как relay неавторизованных Проверь mynetworks в main.cf, настрой SASL auth
Connection refused (port 25) MTA не слушает или провайдер режет Проверь systemctl status postfix, откры порт у провайдера
Connection timed out Файрвол режет исходящие соединения Проверь iptables/ufw, попробуй через другой порт
SASL authentication failed Неверный логин/пароль для relay Проверь /etc/postfix/sasl_passwd, пересоздай postmap
mail for X loops back to myself Неправильный mydestination или myhostname Убери домен из mydestination если это не локальный домен
550 5.7.1 SPF check failed SPF не включает IP сервера Добавь ip4:ТВ0Й_IP в SPF-запись
STARTTLS not available TLS не настроен на сервере Настрой SSL-сертификат в Postfix, включи starttls
deferred (host or domain not found) DNS не может разрезолвить MX получателя Проверь /etc/resolv.conf, смени DNS на 8.8.8.8



⚠️ Осложнения: что делать, если рецепт не помог

Чеклист «последней надежды»

Если всё вышеперечисленное сделано, а письма всё ещё не уходят — работай по этому чеклисту:

  • Проверь hostname сервера. Он должен совпадать с PTR-записью и быть FQDN (полным доменным именем).
hostname -f
# Должно быть: mail.yourdomain.com
# Если нет — исправь в /etc/hostname и /etc/hosts
  • Проверь main.cf Postfix на корректность:
postfix check
# Если тихо — конфиг ок.
# Если есть ошибки — они будут выведены.
  • Проверь, не стоит ли SELinux / AppArmor на пути:
# SELinux:
getenforce
# Если "Enforcing" — попробуй временно: setenforce 0
# Смотри audit.log:
grep postfix /var/log/audit/audit.log | grep denied | tail -20
  • Проверь, не забит ли диск — Postfix молча падает при 100% диска:
df -h
# Если /var или / под завязку — чисти логи, очередь, журналы.
du -sh /var/spool/postfix/deferred/
  • Проверь права на директории Postfix:
postfix set-permissions
ls -la /var/spool/postfix/
  • Gmail специфично отбивает письма? Проверь Google Postmaster Tools — там видна репутация домена и IP. Зарегистрируй домен на postmaster.google.com.
  • Outlook / Microsoft блокирует? Подай заявку на разблокировку через Junk Mail Reporting Program: sendersupport.olc.protection.outlook.com/pm/troubleshooting.aspx

Минимальный рабочий конфиг Postfix (main.cf)

Если хочешь начать с чистого листа — вот минимальный конфиг, который работает на большинстве серверов:

# /etc/postfix/main.cf — минимальный рабочий конфиг

# Основные параметры
myhostname = mail.yourdomain.com
mydomain = yourdomain.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4

# Кому доставляем локально (убери домен, если не принимаешь почту на этот сервер):
mydestination = $myhostname, localhost.$mydomain, localhost

# Сети, которым разрешена отправка без авторизации:
mynetworks = 127.0.0.0/8

# Размер сообщений (50MB):
message_size_limit = 52428800

# TLS параметры:
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level = may
smtp_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# SASL auth для клиентов:
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous

# Ограничения:
smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination
# После изменений main.cf:
postfix check && systemctl reload postfix



🩺 Прогноз: что мы сделали и чего теперь ждать

По факту, если ты прошёл все шаги — ты:

  1. Убедился, что MTA запущен и слушает нужные порты
  2. Проверил, открыт ли исходящий порт 25 (и знаешь, что делать, если нет)
  3. Проверил очередь и отправил застрявшие письма
  4. Проверил PTR, SPF, DKIM, DMARC — без них письма либо летят в спам, либо отбиваются
  5. Проверил IP на blacklist и знаешь, куда идти делистироваться
  6. Запустил авто-скрипт диагностики и получил расклад по всем пунктам

Если ты сделал всё это и почта по-прежнему не уходит — значит, проблема либо на принимающей стороне (Gmail ненавидит тебя лично), либо у провайдера жёсткие блокировки. В обоих случаях решение — переключиться на SMTP-relay через авторизованный сервис (SendGrid, Mailgun, Amazon SES, Brevo). Это быстро, дёшево и избавляет от 90% геморроя с репутацией.

Профилактика: Настрой мониторинг очереди (например, через Zabbix или простой cron-скрипт), следи за blacklist-ами раз в неделю через MXToolbox, и никогда не запускай массовые рассылки прямо с боевого сервера. Для рассылок — отдельный IP или сторонний сервис. Твой боевой IP — это дорогой актив, не надо его жечь.

Быстрый скрипт мониторинга очереди Postfix (cron)

#!/bin/bash
# Добавь в crontab: */15 * * * * /usr/local/bin/check_mailq.sh
# Отправит alert если в очереди больше 100 писем

THRESHOLD=100
ADMIN_EMAIL="admin@yourdomain.com"
QUEUE_SIZE=$(postqueue -p 2>/dev/null | tail -1 | grep -oP '^\d+')

if [ -n "$QUEUE_SIZE" ] && [ "$QUEUE_SIZE" -gt "$THRESHOLD" ]; then
  echo "ALERT: В очереди Postfix $QUEUE_SIZE писем на $(hostname) в $(date)" \
    | mail -s "⚠️ Postfix queue alert" $ADMIN_EMAIL
fi
# Добавь в cron:
(crontab -l 2>/dev/null; echo "*/15 * * * * /usr/local/bin/check_mailq.sh") | crontab -
chmod +x /usr/local/bin/check_mailq.sh

Есть вопросы по конкретной ошибке из логов? Пиши в комментарии — разберём. Если помог рецепт — поставь звёздочку или поделись с коллегой, которому тоже «не уходят письма». Экономь чужое время.

Андрей Анатольевич
Author: Андрей Анатольевич

Руководитель ИТ / Кризис-менеджер 25 лет в IT: от инженера в МегаФоне до руководителя отдела. Знаю, как выглядит бардак: нестабильные сети, устаревшая инфраструктура, конфликты в команде, раздутые сроки. Помогаю бизнесу выходить из кризиса: навожу порядок в легаси, стабилизирую то, что разваливается, выстраиваю прогнозируемые процессы. Не раз возвращал к жизни ИТ-структуры — знаю цену хаосу. 📍 Ищу проект для полной реорганизации / стабилизации. 📬 Telegram: @over_dude ✉️ mail@it-apteka.com

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →

Мы ВКонтакте

IT-Аптека — советы, новости и помощь рядом.

Вступить в группу ВКонтакте →
Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх