EvilMail
Разработчикам

Автоматизация тестирования email-верификации с одноразовыми адресами

Стройте надёжные end-to-end тесты для потоков регистрации, сброса пароля и систем уведомлений с помощью API EvilMail.

EvilMail Team20 февраля 2026 г.9 мин чтения

Если ваше приложение отправляет электронные письма — подтверждения регистрации, сброс пароля, счета, уведомления — вам необходимы автоматизированные тесты, которые проверяют, что эти письма действительно доставляются и содержат корректные данные. Мы видели слишком много команд, которые пропускают тестирование email-потоков, считая это слишком сложным. Это не так, и данное руководство это докажет.

Фундаментальная проблема тестирования email-потоков заключается в том, что вам нужны реальные, доступные почтовые ящики, которые можно программно читать. Использование личных Gmail-аккаунтов в CI-пайплайнах — это хрупкое, небезопасное и немасштабируемое решение. Именно здесь API одноразовой почты занимает своё законное место в зрелом стеке тестирования.

Настройка тестового окружения Для начала получите API-ключ в панели управления EvilMail. Сохраните его как переменную окружения в вашей CI-системе — никогда не коммитьте API-ключи в систему контроля версий. ``` export EVILMAIL_API_KEY="your_api_key_here" ```

Создание тестового адреса Перед каждым запуском тестов генерируйте свежий одноразовый адрес: ``` curl -X POST https://evilmail.pro/api/temp-email \ -H 'Content-Type: application/json' \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -d '{"domain": "evilmail.pro", "ttlMinutes": 30}' ```

В ответе содержится адрес электронной почты и токен сессии. Используйте этот адрес для регистрации тестового аккаунта в вашем приложении.

Опрос входящих После выполнения действия, инициирующего отправку письма (регистрация, сброс пароля и т.д.), опрашивайте эндпоинт входящих до получения сообщения: ``` curl https://evilmail.pro/api/inbox \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" ```

В реальном тесте этот запрос оборачивается в цикл повторных попыток с тайм-аутом. Вот практический пример на Python: ``` import requests import time

API_KEY = os.environ['EVILMAIL_API_KEY'] BASE = 'https://evilmail.pro'

def wait_for_email(subject_contains, timeout=60): deadline = time.time() + timeout while time.time() < deadline: r = requests.get(f'{BASE}/api/inbox', headers={'X-API-Key': API_KEY}) messages = r.json().get('data', []) for msg in messages: if subject_contains in msg['subject']: return msg time.sleep(3) raise TimeoutError('Email not received') ```

Интеграция с CI/CD пайплайнами Этот подход прозрачно работает с любой CI-системой — GitHub Actions, GitLab CI, Jenkins, CircleCI. Ключевой принцип: каждый запуск тестов получает уникальный одноразовый адрес, выполняет проверки, а адрес автоматически истекает. Никаких скриптов очистки, никаких захламлённых общих ящиков, никаких нестабильных тестов из-за писем от предыдущих запусков.

Шаг в рабочем процессе GitHub Actions может выглядеть так: ``` - name: Run email integration tests env: EVILMAIL_API_KEY: ${'{ secrets.EVILMAIL_API_KEY }'} run: pytest tests/email/ -v --timeout=120 ```

Что именно проверять Не ограничивайтесь проверкой факта доставки письма. Верифицируйте тему письма, адрес отправителя, наличие критически важных ссылок (URL верификации, токены сброса) и то, что эти ссылки действительно ведут на валидные страницы. Полноценный email-тест проверяет всю цепочку — от триггера до доставки и корректности содержимого.

Масштабирование до сотен тестов Для крупных тестовых наборов, требующих множества одновременных адресов, используйте эндпоинт создания аккаунтов для генерации адресов на собственном домене. Это даёт полный контроль над пространством имён и позволяет избежать ограничений на эндпоинте временных адресов: ``` curl -X POST https://evilmail.pro/api/accounts \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"email": "[email protected]", "password": "testpass"}' ```

После завершения тестового набора удалите тестовые аккаунты массово: ``` curl -X DELETE https://evilmail.pro/api/accounts \ -H 'X-API-Key: '"$EVILMAIL_API_KEY" \ -H 'Content-Type: application/json' \ -d '{"emails": ["[email protected]"]}' ```

Итог Тестирование электронной почты не должно быть хрупким дополнением к вашему набору тестов. С правильным API одноразовой почты оно становится таким же детерминированным и надёжным, как любой другой интеграционный тест. Выпускайте релизы с уверенностью, что ваши письма действительно работают.

Похожие статьи