Назад к базе знаний

Как разработчики используют одноразовую почту для тестирования

Тестирование функционала электронной почты — утомительное занятие. Создать Gmail-аккаунт #47, верифицировать его, проверить ящик, сделать скриншот письма, повторить для каждого теста.

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

Проблема тестирования

Традиционный процесс тестирования email:

1. Создать тестового пользователя с [email protected]
2. Запустить сброс пароля
3. Открыть Gmail в другой вкладке
4. Ждать письмо
5. Найти его среди 200 других тестовых писем
6. Тест завершён
7. В ящике теперь 247 тестовых писем

Проблемы:

  • Засоряет ваш почтовый ящик
  • Невозможно распараллелить (один адрес переиспользуется)
  • Gmail может пометить ваши тестовые письма как спам
  • Нужно вручную чистить сотни тестовых аккаунтов

Решение: API одноразовой почты

С tempy.email:

// Создать почтовый ящик
const mailbox = await fetch('https://tempy.email/api/v1/mailbox', {
  method: 'POST'
}).then(r => r.json());

// Использовать в тесте
await yourApp.signup({ email: mailbox.email });

// Получить письма
const emails = await fetch(
  `https://tempy.email/api/v1/mailbox/${mailbox.email}/emails`
).then(r => r.json());

console.log(emails[0].subject); // "Подтвердите ваш email"

// Адрес истекает автоматически - ноль очистки

Реальные сценарии использования

1. Интеграционные тесты

def test_welcome_email():
    # Создать временный почтовый ящик
    r = requests.post('https://tempy.email/api/v1/mailbox')
    email = r.json()['email']

    # Создать пользователя
    create_user(email=email)

    # Проверить ящик
    time.sleep(2)
    emails = requests.get(f'https://tempy.email/api/v1/mailbox/{email}/emails')

    assert "Welcome" in emails.json()[0]['subject']

2. E2E-тесты (Cypress/Playwright)

// Генерировать уникальный email для каждого запуска теста
const mailbox = await cy.request('POST', 'https://tempy.email/api/v1/mailbox');

cy.visit('/signup');
cy.get('[name="email"]').type(mailbox.body.email);
cy.get('button').click();

// Ждать письмо подтверждения
cy.wait(2000);
cy.request(`https://tempy.email/api/v1/mailbox/${mailbox.body.email}/emails`)
  .then((res) => {
    const link = extractLink(res.body[0].bodyHtml);
    cy.visit(link);
  });

3. Нагрузочное тестирование

Протестировать 1000 регистраций параллельно — каждая с уникальным адресом:

await Promise.all(
  Array(1000).fill().map(async () => {
    const m = await createMailbox();
    await testSignup(m.email);
    // Истекает автоматически, очистка не нужна
  })
);

4. Проверка email-шаблонов

// Отправить тестовое письмо
await sendEmail({
  to: tempAddress,
  template: 'order_confirmation',
  data: { order: '12345', total: '$99' }
});

// Проверить корректность рендеринга шаблона
const email = await getEmail(tempAddress);
assert(email.bodyHtml.includes('Order #12345'));
assert(email.bodyHtml.includes('$99'));

Справочник API

Создать почтовый ящик:

POST https://tempy.email/api/v1/mailbox
→ { "email": "[email protected]", "expires_at": "..." }

Получить письма:

GET https://tempy.email/api/v1/mailbox/{address}/emails
→ [{ "subject": "...", "bodyHtml": "...", ... }]

Продлить TTL:

POST https://tempy.email/api/v1/mailbox/{address}/extend
→ Добавляет 5 минут

Лучшие практики

Использовать уникальные адреса для каждого теста:

// Каждый тест получает чистый ящик
test('signup', async () => {
  const email = await createUniqueEmail();
  await testWith(email);
});

Опрашивать ящик на наличие писем:

async function pollForEmail(address, timeout = 10000) {
  const start = Date.now();
  while (Date.now() - start < timeout) {
    const emails = await getEmails(address);
    if (emails.length > 0) return emails[0];
    await sleep(500);
  }
  throw new Error('Письмо не получено');
}

Не использовать общие адреса:

// Плохо - письма из разных тестов перемешиваются
const SHARED_EMAIL = '[email protected]';

Экономия времени

Раньше: 10 мин/тест x 100 тестов/неделя = 1000 мин/неделя = 16,7 часов/неделя

Теперь: 30 сек/тест x 100 тестов = 50 мин/неделя

Экономия: более 15 часов на разработчика в неделю.

Интеграция с CI/CD

# .github/workflows/test.yml
name: Email Tests
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: npm test -- email.test.js
        env:
          TEMP_EMAIL_API: https://tempy.email/api/v1

Без API-ключей. Без лимитов запросов. Просто работает.

Перестаньте засорять свой почтовый ящик. Начните тестировать умнее с tempy.email.

Обновлено февраля 12, 2026