Меню

Почтовый ящик catch-all для тестового окружения

Почтовый ящик catch-all принимает письма на любой адрес своего домена. Разбираем, почему его берут для тестового контура, чем он опасен и как ограничить его работу.

Опубликовано

  • тестовое окружение
  • почтовые ящики
  • тестирование

Почтовый ящик catch-all — это адрес, который принимает письма, отправленные на любое имя внутри своего домена, даже если такого имени никто не заводил. Для тестового контура это выглядит как избавление от рутины: не нужно создавать новый ящик под каждый сценарий. Но у этого удобства есть цена, и она проявляется в самый неудачный момент. Разберём, как он устроен, где полезен и какие ограничения обязательны.

Что такое приём писем на любой адрес

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

Технически это не отдельный вид почты, а настройка маршрутизации. Домен указывает, что принимать письма должен один сервер, а тот складывает их в одно хранилище и помечает, на какое имя они пришли. Разделение между получателями остаётся только в виде пометки: фактически весь поток попадает в одно место.

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

Почему такой ящик берут для тестового контура

Главная причина — экономия усилий. В тестовом окружении адреса нужны десятками: по одному на каждый сценарий, на каждый набор данных, на каждую роль. Заводить их по отдельности означает вести учёт, чистить старые, синхронизировать со стендом. Адрес по умолчанию убирает эту работу полностью: любой адрес в домене уже существует.

Вторая причина — предсказуемость для разработчика. Если адрес заранее известен, его можно зашить в фикстуру и не переписывать конфигурацию при каждом запуске. Это удобно для ручной отладки: посмотрел письмо, нашёл ошибку, поправил.

Третья причина связана с безопасностью переписки. Пока весь тестовый поток идёт в один домен, легко убедиться, что наружу ничего не уходит: писем на реальные адреса просто нет. Это заметно лучше, чем тестовый контур, который по недосмотру рассылает уведомления настоящим людям.

Чем опасен ящик, принимающий всё

Опасности начинаются там, где поток перестаёт быть полностью тестовым.

Риск Как проявляется Чем заканчивается
Посторонние письма на домен приходит почта от реальных отправителей тестовые данные смешиваются с настоящими
Рост объёма никто не чистит хранилище поиск нужного письма занимает часы
Утечка наружу стенд настроен на настоящие адреса внутренняя переписка уходит посторонним
Ложная уверенность письмо нашлось, но не то тест проходит, а дефект остаётся
Путаница получателей имена похожи, различает только пометка неверный вывод о работе системы

Первый риск самый серьёзный. Домен, который принимает всё, со временем начинают находить посторонние отправители. Достаточно один раз указать адрес на внешнем ресурсе — и поток чужих писем обеспечен. Вместе с ними в тестовое хранилище попадают чужие персональные данные, а это уже не тестовая проблема, а настоящий инцидент.

Второй риск проявляется незаметно. Пока писем мало, всё удобно. Через полгода в одном хранилище лежат тысячи сообщений, и понять, какое из них относится к проверяемому сценарию, невозможно без дополнительных признаков.

Как ограничить такой ящик

Четыре правила закрывают почти все описанные риски.

Первое — отдельный домен для тестов. Он не должен совпадать с доменом, на который приходит рабочая или личная переписка. Тогда постороннее письмо — уже сигнал, а не фон.

Второе — разделение по префиксу. Если каждому сценарию давать свой префикс, письма перестают смешиваться, а поиск сводится к одному условию. Это же правило позволяет понять, откуда пришло письмо, и заметить, когда один сценарий начинает писать в чужой адрес.

Третье — срок хранения. Всё, что не нужно, должно исчезать по расписанию. Без этого хранилище превращается в архив, в котором невозможно найти нужное, зато легко потерять контроль над тем, что там лежит.

Четвёртое, самое важное — запрет на маршрутизацию наружу. Тестовый контур ни при каких условиях не должен отправлять письма на реальные адреса. Это правило стоит проверить не на словах, а в конфигурации: ошибка в одном поле способна превратить тестовую рассылку в письма живым людям.

Когда приём на любой адрес настраивают зря?

Он вредит, если стенд используется не только для тестов. Например, если на том же домене живёт демонстрационный контур для показа клиентам: туда попадут письма из обеих сред, и разобрать их будет нечем.

Он вредит и тогда, когда письмо становится доказательством. Если тест проверяет, что письмо ушло конкретному получателю, ящик, принимающий всё, маскирует ошибку: письмо придёт, но не тому, кому нужно. Здесь нужен адрес, который принимает только своё, — тогда неверный получатель сразу виден. По этой же причине ящик плохо подходит для проверки самого сценария подтверждения адреса: разбор таких случаев есть в материале о тестировании подтверждения почты.

И он вредит как постоянное решение. Приём на любой адрес — это удобство на время, а не архитектура. Если тестовый контур живёт годами, рано или поздно нужен явный список адресов с понятными правилами очистки.

Почему хранилище быстро превращается в свалку?

Причина не в объёме писем, а в отсутствии учёта. Когда адрес принимает всё, никто не знает, сколько сообщений приходит и откуда. Счётчик, который стоило бы завести с первого дня, обычно появляется только после того, как разбирать хранилище становится больно.

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

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

Что важно разработчику: префиксы, очистка и изоляция

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

Второе — очистка должна быть автоматической и по расписанию. Ручная чистка не делается: сначала её откладывают, потом забывают. Правило «всё старше определённого возраста удаляется» работает без напоминаний.

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

Четвёртое — проверяйте сам ящик. Полезно иметь тест, который подтверждает, что письмо, отправленное на несуществующее имя в тестовом домене, действительно попадает в тестовое хранилище, и что письмо, отправленное на внешний адрес, не уходит никуда. Так настройка не развалится незаметно.

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

И последнее: адреса, которые вы раздаёте, остаются тестовыми. Их нельзя использовать для регистрации от имени реального человека, для получения доступа к чужим сервисам или как замену настоящей почты: это инструмент проверки, а не личность.

Что делать дальше

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

Читать дальше

Статьи: Временная почта (одноразовая / на 10 минут)

Статьи: Временная почта (одноразовая / на 10 минут)

Здесь собраны только статьи по теме этой страницы.