Тестовое письмо отправлено, и хочется взгляда со стороны: помещается ли тема, все ли ссылки абсолютные и живые, есть ли ссылка на отписку, читается ли текст при заблокированных картинках? Человек отвечает через час, ассистент — через секунды, если дать ему письмо в формате, который он может прочитать.
Не отправляйте скриншоты — отдайте машиночитаемый вид
Копирование из браузера теряет заголовки, текстовую часть и вложения, а скриншоты теряют всё остальное. Вместо этого используйте read-only ссылку на инбокс: человек откроет её в браузере, а ассистент прочитает тот же контент как данные.
Как работает экспорт
Возьмите ссылку шаринга (/s/…) и добавьте /export:
/s/…/export — JSON со всеми перехваченными элементами (по умолчанию).
/s/…/export?format=text — текстовый дайджест, удобный для вставки в промпт.
JSON выглядит так (сокращённо):
{
"resource": "inbox",
"name": "Staging app",
"read_only": true,
"generated_at": "2026-09-10T12:00:00+00:00",
"expires_at": "2026-09-11T12:00:00+00:00",
"count": 2,
"items": [
{
"id": 17,
"from": "App <app@example.com>",
"to": ["customer@example.com"],
"subject": "Ваш счёт №1042",
"received_at": "2026-09-10T11:58:00+00:00",
"text": "Здравствуйте! Счёт во вложении.",
"attachments": [{"filename": "invoice.pdf", "contentType": "application/pdf", "size": 18422}]
}
]
}
Ссылки на вебхуки отдают сам запрос: метод, URL, query, заголовки, сырое тело, IP, user-agent и время.
Рабочий промпт
Забери https://sandbox.example.com/s/TOKEN/export?format=text и проверь письма.
Проверь: тема до 60 символов и не капсом; все ссылки абсолютные и доступные;
есть ссылка на отписку; нет заглушек вроде "Lorem" и "{{name}}"; текст читается
без картинок.
Ответь чек-листом проблем и предложи исправление для каждой.
Так как в экспорте есть текстовая часть, модель оценит обе версии письма, ничего не рендеря.
Правила безопасности
- Ссылка шаринга и есть пароль: обращайтесь с ней как с секретом. Ставьте минимальный разумный срок (часто достаточно часа) и отзывайте её после проверки.
- Отправляйте только тестовые данные. Песочница не доставляет реальные письма, но ассистент может передать дальше то, что вы ему дали.
- Ссылка только для чтения, и все ответы содержат
noindex, поэтому краулеры не сохранят тестовое письмо.
- Экспорт ограничен последними элементами, так что переполненный инбокс не вернёт неограниченный объём.
Автоматизация в CI
Заберите экспорт через curl и проверьте его тестами — или передайте в вызов вашей модели и валите сборку, если чек-лист не пуст. Это тот же endpoint, которым пользуется ассистент: одна реализация для людей, скриптов и моделей.
Что дальше
Как ассистент получит содержимое?
Добавьте /export к ссылке: по умолчанию вернётся JSON со всеми письмами, а ?format=text даст текстовый дайджест, удобный для вставки в промпт.
Безопасно ли отдавать ссылку модели?
Ссылка только для чтения, её можно сделать срочной и отозвать, и она никогда не индексируется. Отправляйте только тестовые данные и отзывайте ссылку после проверки.
Что именно в JSON?
Обёртка (resource, name, count, exported_at, expires_at) и массив items с объектом на письмо: id, from, to, cc, bcc, subject, text, html, headers, attachments и received_at.
Модель сама откроет ссылку?
Только если у неё есть доступ в интернет и вы дали URL. Если нет — вставьте дайджест ?format=text: он написан так, чтобы читаться как обычный текст.
Это заменяет ручную проверку?
Нет. Модель хорошо ловит отсутствующий unsubscribe, битую ссылку, оставшийся плейсхолдер или странный тон, но финальный вид в реальном клиенте всё равно стоит глянуть человеку.
Можно автоматизировать в CI?
Да: экспорт — стабильный JSON, поэтому задача может забрать его через curl и проверить тему, получателей или строку в теле без браузера.
Попробуйте сами
Создайте бесплатный аккаунт, сделайте инбокс или URL вебхука и направьте на них своё приложение. Ничего не доставляется реальным получателям.
SMTP-песочница за четыре шага и проверка настоящего письма в CI: примеры для Laravel, Django, Node и командной строки плюс детали, которые ломаются в проде.
Четыре способа тестировать вебхуки локально: постоянный catch-all URL, туннель, повторная доставка от провайдера и локальная ловушка — плюс разбор запроса и проверка подписи.
Что использовать вместо Mailtrap: Mailpit, smtp4dev и заброшенный MailHog в сравнении с приватно хостируемой песочницей, плюс чек-лист переезда за десять минут.
MailHog не поддерживается уже несколько лет. Чем его заменить (Mailpit, smtp4dev, приватно хостируемая песочница), как переехать за пять минут и что вы при этом теряете.
Mailpit вы запускаете сами, MailHog — то, что он заменил, Mailtrap — сервис по подписке: сравнение по обслуживанию, цене, месту хранения писем и командным функциям.
Что такое mailtrap.io, чем ограничен его бесплатный тариф по счётчику, что означают запросы «mail trap», «trap email» и «mailtrap login» — и какие есть бесплатные альтернативы.
Сервис Mailpit для вашего compose-файла: порты, том с данными чтобы письма переживали перезапуск, конфигурации приложений, healthcheck для CI и ошибки, которые стоит знать заранее.
Mail::fake() доказывает, что код вызвал отправку; настоящая SMTP-песочница доказывает, что письмо правильное. Обе настройки, стили проверок, ловушка с очередью и ошибки, из-за которых сломанное письмо уходит в прод.
На что смотреть, когда перехваченные payload-ы настоящие: отзыв доступа, noindex, история запросов, read-only шаринг и машинный экспорт — и как на каждый пункт отвечает этот инстанс.