Временная почта
на Java.
Одноразовые почтовые ящики в Java одним HTTP-запросом.
var http = HttpClient.newHttpClient();
var req = HttpRequest.newBuilder()
.uri(URI.create("https://evilmail.pro/api/temp-email"))
.header("X-API-Key", System.getenv("EVILMAIL_KEY"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"ttlMinutes\":30}"))
.build();
var body = http.send(req, HttpResponse.BodyHandlers.ofString()).body();
// body -> {"data":{"email":"...","sessionToken":"..."}}
var email = body.replaceAll("(?s).*\"email\":\"([^\"]+)\".*", "$1");
System.out.println("Inbox: " + email);Раньше создание временного почтового ящика в Java означало парсинг веб-интерфейса или разворачивание собственного SMTP catch-all — с EvilMail это один HTTP-запрос. На этой странице показано, как работать с временной почтой в Java, используя только встроенный java.net.http.HttpClient: создать одноразовый ящик, опрашивать его, пока не придёт письмо с подтверждением, затем прочитать сообщение и извлечь OTP. Это именно то, что нужно, чтобы автоматизировать тестирование проверки email в CI, полностью прогонять сценарии регистрации или проверять коды сброса пароля, не трогая ни одного реального почтового ящика. Никакого SDK, никаких зависимостей — только API временной почты и обычный HTTP, который можно вставить в любой набор тестов JUnit или интеграционных тестов.
Зачем использовать временную почту на Java
Сквозные тесты регистрации
Создавайте свежий одноразовый ящик для каждого прогона тестов, чтобы сценарии регистрации никогда не конфликтовали. Убедитесь, что приветственное письмо или письмо с подтверждением действительно приходит, прежде чем двигаться дальше.
OTP и коды подтверждения в CI
Опрашивайте ящик из вашего набора JUnit или интеграционных тестов и вытаскивайте 6-значный код прямо из тела письма с помощью regex. Тестирование проверки email в Java становится полностью автоматизированным и воспроизводимым.
QA сброса пароля
Инициируйте сброс, получите временный email в Java и перейдите по токенизированной ссылке — проверяя весь цикл без общего командного ящика, который заполняется тестовым шумом.
Одноразовые ящики для скраперов и ботов
Когда рабочему процессу нужен временный адрес, создавайте его по требованию с коротким TTL. Ящик истекает сам, поэтому потом ничего не нужно чистить.
Процесс — временная почта Java за 3 вызова
Создать одноразовый ящик
import java.net.URI;
import java.net.http.*;
var http = HttpClient.newHttpClient();
var key = System.getenv("EVILMAIL_KEY"); // never hard-code
var create = HttpRequest.newBuilder()
.uri(URI.create("https://evilmail.pro/api/temp-email"))
.header("X-API-Key", key)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"ttlMinutes\":30}"))
.build();
var body = http.send(create,
HttpResponse.BodyHandlers.ofString()).body();
// {"data":{"email":"..","sessionToken":".."}}
var email = body.replaceAll("(?s).*\"email\":\"([^\"]+)\".*", "$1");
var token = body.replaceAll(
"(?s).*\"sessionToken\":\"([^\"]+)\".*", "$1");
System.out.println("Inbox " + email + " (token " + token + ")");
Опрашивать, пока не придёт письмо
import java.util.regex.Pattern;
// Poll up to 20 times, 3s apart, until a message lands.
int uid = -1;
for (int i = 0; i < 20 && uid < 0; i++) {
var poll = HttpRequest.newBuilder()
.uri(URI.create(
"https://evilmail.pro/api/temp-email/" + token))
.header("X-API-Key", key)
.build();
var body = http.send(poll,
HttpResponse.BodyHandlers.ofString()).body();
// messages[] carries a "uid" once mail arrives
var m = Pattern.compile("\"uid\":(\\d+)").matcher(body);
if (m.find()) { // first (newest) message
uid = Integer.parseInt(m.group(1));
break;
}
Thread.sleep(3000); // wait before the next attempt
}
if (uid < 0) throw new RuntimeException("No mail after ~60s");
System.out.println("Got message uid=" + uid);
Прочитать сообщение и извлечь код
import java.util.regex.Pattern;
var read = HttpRequest.newBuilder()
.uri(URI.create("https://evilmail.pro/api/message/" + uid
+ "?token=" + token))
.header("X-API-Key", key)
.build();
var body = http.send(read,
HttpResponse.BodyHandlers.ofString()).body();
// data.text holds the plain-text body
var text = body.replaceAll(
"(?s).*\"text\":\"([^\"]*)\".*", "$1");
// A 6-digit OTP: \b(\d{6})\b
var otp = Pattern.compile("\\b(\\d{6})\\b").matcher(text);
if (otp.find()) System.out.println("Code: " + otp.group(1));
else System.out.println("No 6-digit code found");
Временная почта Java — FAQ
Q1Как получить адрес временной почты в Java?−
Отправьте POST на https://evilmail.pro/api/temp-email с заголовком X-API-Key и JSON-телом вида {"ttlMinutes":30}. В ответе возвращаются data.email (адрес) и data.sessionToken, который вы сохраняете для опроса и чтения сообщений. Пример в шапке выше делает именно это с помощью встроенного java.net.http.HttpClient — внешний SDK не требуется.
Q2Можно ли использовать это для автоматизированного тестирования?+
Да, это основной сценарий использования. Поскольку всё работает на обычном HTTP, вы можете создать ящик в начале теста JUnit или интеграционного теста, инициировать отправку письма вашим приложением, опрашивать ящик до его прихода и проверять содержимое. Давайте каждому прогону тестов собственный ящик, чтобы параллельные запуски никогда не делили состояние, и используйте короткий TTL, чтобы ничего не оставалось между сборками.
Q3Как извлечь OTP?+
Получите сообщение через GET /api/message/{uid}?token={sessionToken}, затем примените regex к data.text (или data.html). Стандартный 6-значный код соответствует \b(\d{6})\b. Шаг извлечения выше компилирует этот шаблон и выводит первое совпадение — подставьте свой шаблон для ссылок или иначе отформатированных кодов.
Q4Нужен ли API-ключ и есть ли ограничения по частоте запросов?+
Да, каждый запрос должен отправлять заголовок X-API-Key; считывайте его из переменной окружения, например EVILMAIL_KEY, а не прописывайте в коде. Запросы ограничены по частоте для каждого ключа, поэтому добавляйте небольшую паузу между опросами (в примере ожидание составляет 3 секунды), а не нагружайте эндпоинт в плотном цикле.
Q5Как долго живёт ящик?+
Вы управляете этим через поле ttlMinutes при создании ящика — в этих примерах 30 минут. Когда TTL истекает, адрес и его сообщения удаляются автоматически, поэтому одноразовые ящики очищают себя сами, и после прогона теста ничего разбирать не нужно.
Временная почта на других языках
Один API-ключ. Одноразовые ящики в масштабе.
Создавайте неограниченное число одноразовых адресов, опрашивайте их по HTTP и получайте коды подтверждения прямо в тесты и CI. Бесплатно на старте; собственные домены и повышенные лимиты на платных тарифах.

