Если вы создаёте автоматизацию, которая “ждёт письмо”, сложная часть редко заключается в парсинге HTML. Сложная часть — это маршрутизация: как сообщение, адресованное на что-то@ваш-домен, детерминированно попадает в правильный API-инбокс каждый раз, при повторах, конкурентности и странных SMTP-кейсах.
Это руководство разбирает, как домены и электронная почта взаимодействуют в продуктах API-инбоксов, что на самом деле происходит при SMTP-доставке, и паттерны маршрутизации, которые делают инбокс-ориентированные рабочие процессы надёжными для AI-агентов и QA.
Для Mailhook-специфичных форматов запросов/ответов и канонического контракта обратитесь к llms.txt проекта.
Маршрутизация email 101: домен контролирует доставку
Email-адрес состоит из двух частей:
-
Локальная часть: всё до
@(например,signup-test-42) -
Домен: всё после
@(например,example.net)
Когда отправитель передаёт сообщение, домен определяет где email доставляется в интернете через DNS.
MX-записи решают, какой сервер получает почту
Для входящей почты отправляющие почтовые серверы ищут MX-записи для домена получателя. MX-записи указывают на почтовые обменники (хостнеймы), которые принимают почту для этого домена.
- Если
вашдомен.comимеет MX-записи, указывающие на провайдера API-инбоксов, сообщения начто-угодно@вашдомен.comбудут доставлены этому провайдеру. - Если MX-записей нет, многие отправители используют A/AAAA-запись домена как резерв (поведение определено в SMTP-стандартах и реализовано MTA), но не стоит полагаться на резервное поведение для продакшн-маршрутизации.
Для контекста стандартов см. RFC 5321 (SMTP) о том, как SMTP доставляет в домены и как работает “конверт”.
Получатели конверта важнее заголовков
SMTP-доставка основана на конверте (SMTP-транзакции), а не на том, что email “говорит” в своих видимых заголовках.
Два поля часто путают:
-
Получатель конверта: что было предоставлено SMTP-серверу в
RCPT TO:<получатель@домен> - Заголовок To: что находится внутри заголовков сообщения, может включать несколько адресов, отображаемые имена или даже отсутствовать в некоторых автоматических сообщениях
Для автоматизации маршрутизация почти всегда основана на получателе конверта (или нормализованном эквиваленте), потому что это наиболее прямое представление “какой адрес получил это сообщение”.
Как работает маршрутизация в API-инбоксах
Как только провайдер получает сообщение для домена, который он контролирует, ему нужно ответить на простой вопрос:
Под каким ресурсом инбокса должно быть сохранено это письмо?
Вот где “маршрутизация API-инбокса” отличается от потребительской почты. В потребительской почте маршрутизация заканчивается в почтовом ящике. В API-инбоксе для автоматизации маршрутизация заканчивается программируемым дескриптором инбокса (часто представленным как ID инбокса), который ваш код может использовать для получения сообщения как JSON, подписки на webhook-события или пакетной обработки сообщений.
Три уровня маршрутизации
Большинство систем API-инбоксов можно понять как три уровня:
- Маршрутизация на уровне домена (DNS): доставляет сообщение провайдеру
-
Привязка получателя к инбоксу (логика приложения): связывает
локальная-часть@доменс ресурсом инбокса - Доставка в ваш код (API/вебхуки): предоставляет сохранённое сообщение вашим системам
Mailhook спроектирован вокруг этой модели автоматизации, предоставляя создаваемые через API одноразовые инбоксы, нормализованный JSON-вывод, webhook-уведомления и polling-доступ (см. контракт llms.txt для точных эндпоинтов и форматов данных).
💡 Пропустите SMTP-инфраструктуру и переходите сразу к надёжной маршрутизации
Вместо создания собственных почтовых серверов и логики маршрутизации, начните с программируемых инбоксов Mailhook, которые автоматически обрабатывают нормализацию конвертов, JSON-конвертацию и webhook-доставку. Начните разработку с API →

Распространённые паттерны привязки получателя к инбоксу
Есть несколько проверенных паттернов для привязки входящего адреса получателя к инбоксу. Правильный выбор зависит от того, нужны ли вашему продукту стабильные адреса, ротирующиеся адреса или несколько адресов на инбокс.
Паттерн A: “Закодированный ключ инбокса” в локальной части
Локальная часть получателя напрямую кодирует ключ маршрутизации, такой как ID инбокса или короткий токен, который можно найти.
Концептуально:
- Вы создаёте инбокс через API
- API возвращает email-адрес типа
k9f3p2@общий-домен.tld - Когда приходит почта для
k9f3p2@общий-домен.tld, провайдер декодирует или ищетk9f3p2и направляет сообщение в инбоксk9f3p2
Почему он популярен:
- Быстрая маршрутизация с минимальными обращениями к базе данных (в зависимости от реализации)
- Адреса можно генерировать безопасно и уникально
- Хорошо работает для автоматизации “один инбокс на запуск”
На что обратить внимание:
- Если ваша локальная часть рассматривается как идентификатор, вы хотите, чтобы она была однозначной при нормализации (например, приведение регистра, обрезка пробелов, plus-адресация). Провайдеры обычно определяют здесь строгие правила.
Паттерн B: Таблица алиасов (реестр адресов)
Провайдер хранит таблицу привязки от полного email-адреса (или нормализованного получателя) к инбоксу.
Почему он популярен:
- Поддерживает несколько адресов на инбокс
- Поддерживает поведение “переименовать”, “ротировать” или “присоединить новый адрес” без изменения дескриптора инбокса
На что обратить внимание:
- Таблицы привязки должны быть проиндексированы и устойчивы при конкурентности
- Нужна чёткая политика нормализации для определения “одинакового адреса”
Паттерн C: Catch-all домен с тегированием сообщений
Catch-all домен принимает любую локальную часть и направляет сообщения на основе дополнительных метаданных (например, токена, добавленного вашим приложением в заголовок, или структурированной части получателя).
Почему используется:
- Полезно для определённых рабочих процессов приёма (например, адреса типа “intake@…”)
На что обратить внимание:
- Корреляция сдвигается от “адрес уникально идентифицирует инбокс” к “сообщение содержит коррелятор”, что может быть менее детерминированно, если вы не контролируете отправителя.
Общие домены против пользовательских доменов: что меняется в маршрутизации
Провайдеры API-инбоксов обычно предлагают две стратегии доменов:
- Общие домены: провайдер владеет и управляет доменами, которые можно использовать немедленно
- Пользовательские домены: вы направляете контролируемый вами домен провайдеру (обычно настройкой MX-записей)
Mailhook поддерживает общие домены и настройки пользовательских доменов (опять же, см. llms.txt для авторитетных возможностей и деталей интеграции).
Практическая матрица решений
| Выбор | Что вы контролируете | Типичное применение | Операционные компромиссы |
|---|---|---|---|
| Общий домен | Только жизненный цикл инбокса и получение | CI-тесты, QA-автоматизация, краткосрочные задачи агентов | Быстрейшая настройка, но ограничения репутации домена и доставляемости разделяются с другими арендаторами во многих системах |
| Пользовательский домен | DNS для входящей почты (MX), плюс репутация вашего домена | Продакшн-подобный staging, брендированные потоки, более строгие требования к доставляемости | Больше настройки, но более чёткие границы владения доменом и меньше сюрпризов с allowlist’ами |
Примечания:
- Доставляемость сложна и зависит от поведения отправителя, политики получателя и репутации домена. Маршрутизация пользовательского домена в основном даёт вам контроль, а не гарантию.
- Для тестирования общие домены часто идеальны, потому что уменьшают трение настройки и сохраняют среды одноразовыми.
Что на самом деле происходит после получения сообщения провайдером
После завершения SMTP-доставки большинство API-инбоксов для автоматизации запускают конвейер приёма, который выглядит так:
- Принять SMTP для получателя на управляемом домене
- Нормализовать и парсить сообщение (заголовки, MIME-структура, текстовые и HTML-тела, вложения)
- Сохранить сообщение и проиндексировать под дескриптором инбокса
- Уведомить нижестоящих потребителей (webhook-события) и/или предоставить через API получения
Модель Mailhook (на высоком уровне): принимать входящую почту, конвертировать в структурированный JSON, затем делать доступным через вебхуки и polling API с подписанными данными для помощи в валидации подлинности.
Вебхуки против polling — это не маршрутизация, но влияет на “семантику ожидания”
Маршрутизация решает, какой инбокс получает сообщение. Вебхуки и polling решают, как ваш код узнаёт, что сообщение пришло.
В автоматизации наиболее надёжный подход обычно:
- Вебхуки в первую очередь для низкой задержки и событийного потока
- Polling как резерв для восстановления от временных сбоев вебхуков, деплоев или сетевых проблем
Вот где важны подписанные webhook-данные: провайдер инбокса говорит вам “сообщение для инбокса X существует”, поэтому ваш получатель должен проверить подписи перед обработкой события как реального.
Для более глубокого обсуждения дизайна RFC определяют транспорт email и формат сообщений (например, RFC 5322 для заголовков сообщений и структуры тела), но семантика доставки webhook — это уровень приложения.
Режимы сбоя маршрутизации, для которых стоит проектировать
Даже с идеальным DNS маршрутизация может сбоить на уровне приложения способами, которые делают тесты нестабильными или агентов ненадёжными.
1) Коллизии в общих инбоксах (проблема “неправильного сообщения”)
Если вы переиспользуете один адрес получателя в параллельных запусках, можете получить:
- Несколько подходящих сообщений
- Случайное переиспользование старого OTP
- Сообщение из другого запуска, которое удовлетворяет слабому сопоставителю
Исправление — дизайн маршрутизации: создавайте изолированный инбокс на запуск (или на попытку), затем направляйте к нему, используя уникальный адрес, который привязан к этому инбоксу.
2) Неоднозначные правила нормализации
Некоторые системы рассматривают Пользователь@домен и пользователь@домен как одного получателя. Другие нет. Некоторые рассматривают plus-адресацию как отдельную локальную часть, другие её обрезают.
Для детерминированной автоматизации нужен провайдер (или внутренняя политика), который явно определяет:
- Обработка регистра
- Поведение plus-адресации
- Разрешённый набор символов для локальных частей
- Максимальная длина локальной части
Если вы генерируете адреса программно, держите локальные части консервативными: в нижнем регистре, однозначными и свободными от символов, которые могут быть преобразованы промежуточными системами.
3) Несколько получателей и пересылка
Один email может иметь несколько видимых получателей (в To:/Cc:) и также может быть переслан или повторно отправлен.
Для корректности маршрутизации в API-инбоксе предпочитайте использование:
- Получателя конверта (фактический адрес на вашем домене, который получил email)
- Узкую область инбокса (инбокс на запуск)
- Сопоставитель сообщений, который включает хотя бы один стабильный критерий, который вы контролируете (например, токен корреляции, вставленный вашим приложением)
4) Повторы, дубли и доставка не по порядку
SMTP-отправители повторяют. Ваше приложение может отправить несколько писем верификации. Пользователи или тест-раннеры могут нажать повторную отправку. Провайдеры могут доставлять webhook-события больше одного раза.
Маршрутизация доставляет сообщение в правильный инбокс, но ваш потребитель всё равно должен быть надёжным:
- Рассматривайте webhook-события как “не менее одного раза”, если не документировано иначе
- Дедуплицируйте, используя стабильные идентификаторы сообщений в JSON-данных
- Предпочитайте явное “ждать сообщение, соответствующее X в рамках временного бюджета” вместо фиксированных пауз
Дружелюбная агентам маршрутизация: рассматривайте дескриптор инбокса как источник истины
Для LLM-агентов лучшее улучшение надёжности — перестать думать “email-адрес это идентификатор” и вместо этого думать:
- Дескриптор инбокса (ID инбокса) — это идентификатор
- Email-адрес — это просто маршрутизируемый указатель, который доставляет почту в этот инбокс
Это избегает распространённого анти-паттерна: поиска в общем почтовом ящике “последнего письма” в надежде, что оно принадлежит вашему запуску.
Минимальный интерфейс, который сохраняет агентов безопасными
Когда вы предоставляете email агентам, держите область инструментов маленькой и детерминированной. Практический паттерн выглядит так:
-
create_inbox()возвращает дескриптор инбокса и маршрутизируемый адрес -
wait_for_message(inbox_id, matcher, timeout)блокирует до прибытия совпадения -
get_message(inbox_id, message_id)получает нормализованный JSON
Затем держите LLM сфокусированным только на том, что он должен извлечь (OTP, магическая ссылка), а не на рендеринге HTML или исследовании сырого контента.
Mailhook построен вокруг этих примитивов (создание одноразовых инбоксов, JSON-вывод, вебхуки, polling, подписанные данные), поэтому вы можете реализовать этот стиль “email как инструмент” без запуска собственного SMTP-стека. Для точных полей и эндпоинтов используйте Mailhook’s llms.txt.
💡 Дайте своим AI-агентам детерминированные email-инструменты
Реализуйте паттерн инбокса на запуск с программируемыми одноразовыми инбоксами Mailhook. Ваши агенты получают чистые JSON-сообщения, webhook-уведомления и изолированную маршрутизацию — никаких коллизий в общих почтовых ящиках. См. руководство по интеграции AI-агентов →
Начните бесплатно для AI-агентов → или Посмотрите примеры интеграции →
Чеклист маршрутизации перед отправкой
Используйте это как проверку здравого смысла при подключении доменов и email к автоматизации:
- Решите стратегию домена: общий домен для скорости, пользовательский домен для контроля.
- Убедитесь, что DNS-маршрутизация правильная: MX-записи для вашего пользовательского домена указывают туда, где вы ожидаете.
- Используйте инбокс на запуск (или инбокс на попытку) для устранения перекрёстных помех.
- Рассматривайте получателя конверта как ключ маршрутизации, а не заголовок
To:. - Проверяйте подписи вебхуков перед действиями по событиям.
- Реализуйте polling-резерв, чтобы пропущенный вебхук не сломал запуск.
- Дедуплицируйте сообщения и пишите сопоставители достаточно узкие, чтобы избежать ложных срабатываний.
- Держите хранение и логирование минимальными, email часто содержит чувствительные данные.
Где подходит Mailhook
Если вы хотите построить эту модель маршрутизации без управления почтовыми серверами, Mailhook предоставляет программируемые одноразовые инбоксы через API, доставляет полученные email как структурированный JSON и поддерживает реальном времени вебхуки плюс polling API с подписанными данными для безопасности и пакетной обработки email.
Для интеграции без угадывания начните с канонической спецификации: Mailhook llms.txt. Вы также можете изучить продукт на Mailhook.