Тимчасова пошта
на C#.
Створюйте одноразові поштові скриньки та отримуйте OTP-коди прямо з C#.
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
var http = new HttpClient { BaseAddress = new Uri("https://evilmail.pro") };
http.DefaultRequestHeaders.Add(
"X-API-Key", Environment.GetEnvironmentVariable("EVILMAIL_KEY"));
// Create an inbox that self-destructs after 30 minutes.
var res = await http.PostAsJsonAsync("/api/temp-email", new { ttlMinutes = 30 });
res.EnsureSuccessStatusCode();
using var doc = await res.Content.ReadFromJsonAsync<JsonDocument>();
var data = doc!.RootElement.GetProperty("data");
Console.WriteLine(data.GetProperty("email").GetString());Підключити тимчасову пошту в C# можна лише кількома рядками HttpClient і System.Text.Json — без SMTP-сервера, без налаштування скриньки, без фейкових SDK. EvilMail дає справжній API одноразової електронної пошти, який можна викликати з будь-якого .NET-застосунку: створити тимчасову скриньку, опитувати її, доки не надійде повідомлення, а потім витягнути код підтвердження з тіла листа за допомогою regex. Він створений для найболючіших частин тестування — наскрізних сценаріїв реєстрації, перевірок OTP та підтвердження email, а також CI-конвеєрів, яким на кожному запуску потрібна свіжа скринька без того, щоб людина коли-небудь відкривала поштовий клієнт.
Навіщо використовувати тимчасову пошту на C#
Автоматизовані тести реєстрації та E2E
Виділяйте свіжу одноразову скриньку на кожен запуск тесту, щоб сценарії реєстрації ніколи не конфліктували на повторно використаній адресі. Ідеально для наборів xUnit, NUnit чи Playwright, які перевіряють вітальний лист або лист підтвердження.
Перевірки OTP та підтвердження email
Опитуйте скриньку, читайте повідомлення та витягуйте 6-значний код одним regex. Ваш тест може повністю пройти крок підтвердження email від початку до кінця, точно так, як це зробив би справжній користувач.
CI/CD-конвеєри
Зчитуйте ключ API зі змінної середовища та генеруйте тимчасові email на вимогу всередині GitHub Actions, Azure Pipelines чи будь-якого раннера — без спільної тестової скриньки, яку треба чистити чи яка впирається в ліміти.
Скрапінг та одноразові реєстрації
Коли .NET-інструменту потрібна одноразова адреса, щоб розблокувати ресурс, створіть скриньку тимчасової пошти, яка самознищується після заданого TTL і ніколи не торкається вашого справжнього домену.
Процес — тимчасова пошта C# за 3 виклики
Створіть одноразову скриньку
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
var http = new HttpClient { BaseAddress = new Uri("https://evilmail.pro") };
http.DefaultRequestHeaders.Add(
"X-API-Key", Environment.GetEnvironmentVariable("EVILMAIL_KEY"));
// Ask for an inbox with a 30-minute time-to-live.
var res = await http.PostAsJsonAsync(
"/api/temp-email", new { ttlMinutes = 30 });
res.EnsureSuccessStatusCode();
using var doc = await res.Content.ReadFromJsonAsync<JsonDocument>();
var data = doc!.RootElement.GetProperty("data");
string email = data.GetProperty("email").GetString()!;
string token = data.GetProperty("sessionToken").GetString()!;
Console.WriteLine($"Inbox: {email}");
Console.WriteLine($"Token: {token}");Опитуйте, доки не надійде лист
// Reuse `http` and `token` from step 1.
// Check the inbox up to 20 times, 3s apart.
int uid = -1;
for (int i = 0; i < 20; i++)
{
var res = await http.GetAsync($"/api/temp-email/{token}");
res.EnsureSuccessStatusCode();
using var doc = await res.Content.ReadFromJsonAsync<JsonDocument>();
var messages = doc!.RootElement
.GetProperty("data").GetProperty("messages");
if (messages.GetArrayLength() > 0)
{
uid = messages[0].GetProperty("uid").GetInt32();
Console.WriteLine($"Got message uid={uid}");
break;
}
Console.WriteLine("No mail yet, retrying...");
await Task.Delay(TimeSpan.FromSeconds(3));
}
if (uid < 0)
throw new TimeoutException("No email arrived in time.");Прочитайте повідомлення та витягніть код
using System.Text.RegularExpressions;
// Fetch the full message body by its uid (reuse `http`, `uid`, `token`).
var res = await http.GetAsync(
$"/api/message/{uid}?token={token}");
res.EnsureSuccessStatusCode();
using var doc = await res.Content.ReadFromJsonAsync<JsonDocument>();
var data = doc!.RootElement.GetProperty("data");
string text = data.GetProperty("text").GetString() ?? "";
// Pull the first 6-digit code out of the body.
var match = Regex.Match(text, @"\b(\d{6})\b");
if (match.Success)
Console.WriteLine($"OTP: {match.Groups[1].Value}");
else
Console.WriteLine("No 6-digit code found.");Тимчасова пошта C# — FAQ
Q1Як отримати адресу тимчасової пошти в C#?−
Надішліть POST-запит на https://evilmail.pro/api/temp-email із заголовком X-API-Key та JSON-тілом на кшталт {"ttlMinutes": 30}. У відповіді data.email — це ваша одноразова адреса, а data.sessionToken — дескриптор, який ви використовуєте для читання її скриньки. З HttpClient і System.Text.Json це близько десяти рядків — див. фрагмент коду вище.
Q2Чи можна використовувати це для автоматизованого тестування?+
Так — це основний сценарій використання. Створюйте свіжу скриньку на початку кожного тесту, ініціюйте лист вашого застосунку, а потім опитуйте GET /api/temp-email/{sessionToken}, доки не з'явиться повідомлення. Це чисто вписується в набори xUnit, NUnit чи Playwright/.NET E2E, а оскільки ключ береться зі змінної середовища, воно працює без нагляду в CI.
Q3Як витягнути OTP із листа?+
Отримайте повідомлення через GET /api/message/{uid}?token={sessionToken}, візьміть data.text (або data.html) і запустіть regex. Для стандартного 6-значного одноразового коду Regex.Match(text, @"\b(\d{6})\b") повертає код у групі 1. Скоригуйте шаблон, якщо ваш провайдер використовує іншу довжину або токен у посиланні.
Q4Чи потрібен ключ API і чи є обмеження частоти запитів?+
Так, кожен запит має містити заголовок X-API-Key — зчитуйте його зі змінної середовища, наприклад EVILMAIL_KEY, і ніколи не прописуйте його жорстко в коді. Запити обмежені за частотою на кожен ключ, тож тримайте опитування в розумних інтервалах (близько 3 секунд, ~20 спроб, як показано), а не в щільних циклах. Точну квоту вашого тарифу дивіться в панелі EvilMail.
Q5Скільки живе скринька?+
Ви керуєте цим через поле ttlMinutes під час створення скриньки — задайте 30 для півгодини або менше для швидких разових перевірок. Щойно TTL спливе, адреса та її повідомлення знищуються, тож отримайте й прочитайте свій лист, доки вікно не закрилося.
Тимчасова пошта іншими мовами
Один ключ API. Одноразові скриньки в масштабі.
Створюйте необмежену кількість тимчасових адрес, опитуйте їх через HTTP і витягуйте коди підтвердження прямо у ваші тести й CI. Безкоштовний старт; власні домени та вищі ліміти на платних тарифах.

