Как отследить маршрут прохождения электронного письма: пошаговая инструкция

Author Admin Reading time 2 minutes

Умение отслеживать, как проходит электронное письмо через почтовые сервисы, важно для IT-специалистов, администраторов и пользователей почты. Эта задача актуальна при решении проблем с доставкой писем, проверке безопасности, расследовании инцидентов и контроле переписки.

Когда нужна отладка маршрута письма

  • устранение проблем с доставкой (не приходит письмо, задержка доставки);
  • подтверждение получения и прочтения сообщения адресатом;
  • расследование случаев подозрительных писем, фишинга или спама;
  • аудит и соответствие корпоративным требованиям по e-mail;
  • анализ производительности почтовых серверов и маршрутизации писем.

Что потребуется для анализа

  • идентификатор письма (Message-ID) — его можно найти в технических сведениях письма;
  • доступ к серверу и логам почтовой системы;
  • специализированный скрипт для поиска по логам (пример ниже).

Инструкция по отслеживанию письма

1. Получите Message-ID письма

Message-ID хранится в заголовках письма, эта уникальная строка необходима для поиска в почтовых логах.

2. Используйте скрипт для анализа логов почтового сервера

Применяется специальный Bash-скрипт, который показывает путь прохождения письма от отправки до доставки. Пример запуска:

./trace-message.sh <message-id>

Где <message-id> — уникальный идентификатор письма (только часть до символа @).

3. Анализируйте результат работы скрипта

В выводе будет видно:

  • этапы прохождения письма по почтовому серверу;
  • временные метки и задержки доставки;
  • адреса участников обмена;
  • статусы доставки и фильтрации.

Пояснения к результатам проверки

Исходящее письмо

  • Находится по Message-ID.
  • Определяется Queue-ID — идентификатор очереди сервера для этого письма.
  • Фиксируются технические детали: IP-адреса, размер, время прохождения через фильтры и внутренние сервисы (например, антивирус, антиспам).
  • Регистрируются этапы: обработка сервером, передача на внешний SMTP-сервер, успешная доставка.

Входящее письмо

  • Аналогично находится по Message-ID.
  • Проверяется прохождение фильтрации, внутренние переговоры между сервисами.
  • Отмечается момент доставки во внутренний ящик почты.

Каждый этап сопровождается временной меткой и итоговым статусом («Ok», «Доставлено», «Удалено из очереди» и т.д.). Это важно для аудита, технической поддержки и соблюдения норм безопасности.

Пример простого скрипта на bash


#!/bin/bash

MESSAGE_ID="$1"

if [ -z "$MESSAGE_ID" ]; then
  echo "❗ Использование: $0 "
  exit 1
fi

# Цвета
RED='\033[0;31m'
GREEN='\033[0;32m'
CYAN='\033[1;36m'
NC='\033[0m' # No Color

echo -e "${CYAN}🔍 Поиск письма с Message-ID: ${GREEN}${MESSAGE_ID}${NC}\n"

# 1. Объединяем все логи postfix
echo -e "${CYAN}📂 Объединяем логи...${NC}"
LOG_FILES=$(ls -tr /var/log/mail.log /var/log/mail.log.* 2>/dev/null | grep -v '.gz')
TEMP_LOG="/tmp/all-mail.log"
cat $LOG_FILES > "$TEMP_LOG"

# 2. Ищем Queue-ID по Message-ID
echo -e "${BLUE}🔎 Поиск Queue-ID по Message-ID...${NC}"
QUEUE_IDS=$(grep "$MESSAGE_ID" "$TEMP_LOG" | grep 'postfix/cleanup' | sed -n 's/.*postfix\/cleanup.*: \([A-Za-z0-9]\+\): message-id=.*/\1/p' | sort -u)

if [ -z "$QUEUE_IDS" ]; then
  echo -e "${RED}⛔ Не найдено Queue-ID по Message-ID: ${MESSAGE_ID}${NC}"
  exit 1
fi

for QID in $QUEUE_IDS; do
  echo -e "\n${CYAN}📦 Прослеживаем путь письма по Queue-ID: ${GREEN}$QID${NC}"
  grep "$QID" "$TEMP_LOG" | sed "s/$QID/${GREEN}$QID${NC}/g"
done

echo -e "\n${GREEN}✅ Готово!${NC}"