Временная почта
на PHP.
Одноразовые ящики и извлечение OTP на PHP — чистый curl, без SDK.
<?php
// Create a disposable EvilMail inbox and print the address.
$key = getenv('EVILMAIL_KEY'); // never hard-code the key
$ch = curl_init('https://evilmail.pro/api/temp-email');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"X-API-Key: $key",
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['ttlMinutes' => 30]),
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $res['data']['email'] . "\n"; // e.g. [email protected]Поднимите временную почту на PHP в несколько строк curl: API EvilMail позволяет создать одноразовый ящик, опрашивать его до прихода письма и вытащить 6-значный код прямо из тела сообщения. Он создан для разработчиков, которым нужно тестировать сценарии регистрации, проверять письма с OTP или запускать проверки почты в CI без настройки реального почтового ящика. Всё построено на обычном HTTP с заголовком X-API-Key, поэтому временная почта на PHP встраивается в любой скрипт, набор тестов или воркер без единой лишней зависимости.
Зачем использовать временную почту на PHP
Автотесты регистрации и OTP
Регистрируйте новый одноразовый ящик на каждый прогон теста, затем считывайте письмо с подтверждением и извлекайте 6-значный код. Никакого общего ящика и пересечения данных между тестами.
Проверка почты в CI/CD
Запускайте сквозные проверки почты прямо в своём пайплайне. Поскольку это просто curl поверх HTTPS, временная почта на PHP работает одинаково и на вашем ноутбуке, и на CI-раннере.
QA транзакционных писем без парсинга
Инициируйте письмо о сбросе пароля или приветственное письмо и проверяйте его тему, отправителя и текст тела прямо из PHP — без настройки IMAP и ручной проверки ящика.
Разовая одноразовая почта на PHP
Нужен временный адрес для формы или демо-аккаунта? Создайте ящик с TTL, используйте его и дайте ему истечь самому. Ничего не нужно вычищать.
Процесс — временная почта PHP за 3 вызова
Создайте одноразовый ящик
<?php
// POST /api/temp-email -> returns email + sessionToken.
$key = getenv('EVILMAIL_KEY');
$ch = curl_init('https://evilmail.pro/api/temp-email');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"X-API-Key: $key",
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['ttlMinutes' => 30]),
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
$email = $res['data']['email'];
$token = $res['data']['sessionToken']; // keep this for polling
echo "Inbox: $email (token $token)\n";Опрашивайте до прихода письма
<?php
// GET /api/temp-email/{token} until messages is non-empty.
$key = getenv('EVILMAIL_KEY');
$token = $token ?? $argv[1]; // sessionToken from step 1
$url = "https://evilmail.pro/api/temp-email/$token";
$messages = [];
for ($i = 0; $i < 20; $i++) { // ~20 tries, 3s apart
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: $key"],
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
$messages = $res['data']['messages'] ?? [];
if (!empty($messages)) {
break; // got at least one email
}
sleep(3);
}
if (empty($messages)) {
exit("No email arrived in time\n");
}
$uid = $messages[0]['uid']; // newest message uid
echo "Got message uid=$uid\n";Прочитайте письмо и извлеките код
<?php
// GET /api/message/{uid}?token=... then regex the OTP.
$key = getenv('EVILMAIL_KEY');
$token = $token ?? $argv[1]; // sessionToken
$uid = $uid ?? $argv[2]; // uid from the poll step
$url = "https://evilmail.pro/api/message/$uid?token=$token";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["X-API-Key: $key"],
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
$body = $res['data']['text'] ?? '';
// A 6-digit OTP, e.g. "Your code is 123456".
if (preg_match('/\b(\d{6})\b/', $body, $m)) {
echo "OTP: {$m[1]}\n";
} else {
echo "No 6-digit code found\n";
}Временная почта PHP — FAQ
Q1Как получить адрес временной почты в PHP?−
Отправьте POST-запрос на https://evilmail.pro/api/temp-email с заголовком X-API-Key и JSON-телом вида {"ttlMinutes": 30}. Ответ содержит data.email (одноразовый адрес) и data.sessionToken, который вы используете для опроса входящих сообщений. Сниппет в шапке делает именно это примерно в десять строк curl.
Q2Можно ли использовать это для автотестов?+
Да — это основной сценарий. Поскольку каждый вызов — это обычный HTTPS с API-ключом, вы можете создать ящик, опросить его и проверить полученное письмо из PHPUnit, набора Behat или CI-задачи. Создавайте новый ящик на каждый тест, чтобы изолировать прогоны и избежать оставшихся писем между тестами.
Q3Как извлечь OTP из письма?+
Получите сообщение через GET /api/message/{uid}?token={sessionToken}, считайте data.text (или data.html) и примените к нему regex. Для стандартного 6-значного одноразового кода preg_match('/\b(\d{6})\b/', $body, $m) вернёт код в $m[1]. Подстройте шаблон, если ваши коды имеют другую длину или формат.
Q4Нужен ли API-ключ и есть ли лимиты запросов?+
Да, каждый запрос должен содержать заголовок X-API-Key — читайте его из переменной окружения, например EVILMAIL_KEY, а не прописывайте в коде. Запросы ограничены по частоте на ключ; цикл опроса из шага 2 (около 20 попыток с интервалом 3 секунды) уверенно укладывается в обычные лимиты. Если получите 429, сделайте паузу и повторите.
Q5Сколько живёт ящик?+
Вы управляете этим через поле ttlMinutes при создании ящика — в примерах это 30 минут. Как только TTL истекает, адрес и его сообщения автоматически удаляются, так что чистить ничего не нужно. Задайте более длинный TTL для медленных сценариев или короткий для быстрых разовых проверок.
Временная почта на других языках
Один API-ключ. Одноразовые ящики в масштабе.
Создавайте неограниченное число одноразовых адресов, опрашивайте их по HTTP и получайте коды подтверждения прямо в тесты и CI. Бесплатно на старте; собственные домены и повышенные лимиты на платных тарифах.

