Тимчасова пошта
на Ruby.
Одноразова пошта для Ruby на основі звичайного net/http.
require "net/http"
require "json"
uri = URI("https://evilmail.pro/api/temp-email")
req = Net::HTTP::Post.new(uri)
req["X-API-Key"] = ENV.fetch("EVILMAIL_KEY")
req["Content-Type"] = "application/json"
req.body = { ttlMinutes: 30 }.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(req)
end
data = JSON.parse(res.body).fetch("data")
puts "Inbox: #{data['email']}"
puts "Token: #{data['sessionToken']}"Налаштування тимчасової поштової скриньки в Ruby дозволяє автоматизувати перевірку email без справжньої скриньки, браузера чи ручного копіювання OTP-кодів. EvilMail надає невеликий HTTP API, який ви можете керувати за допомогою стандартної бібліотеки Ruby net/http: створіть одноразову скриньку, опитуйте її, доки не надійде повідомлення, а потім витягніть код підтвердження прямо з тіла листа за допомогою regex. Він створений для розробників, яким потрібна тимчасова пошта в Ruby у тестових наборах, CI-конвеєрах та потоках реєстрації чи OTP — без сторонніх gem-ів, без фейкових SDK, лише звичайні запити та JSON.
Навіщо використовувати тимчасову пошту на Ruby
Наскрізні тести реєстрації
Зареєструйте фейкового користувача на живу тимчасову поштову адресу та переконайтеся, що вітальний лист або лист підтвердження справді надходить. Жодної спільної командної скриньки, яку потрібно засмічувати чи очищати.
Тестування перевірки OTP і 2FA
Запустіть вхід або скидання пароля, опитайте скриньку та витягніть 6-значний код одним regex. Ваше тестування перевірки email у Ruby виконується повністю без нагляду.
CI/CD-конвеєри
Оскільки це просто net/http і ключ API, одноразова пошта в Ruby працює однаково на вашому ноутбуці та в GitHub Actions чи GitLab CI — жодного SMTP-сервера чи автоматизації браузера для підтримки.
Збирання посилань активації
Отримайте повний текст або HTML повідомлення та витягніть magic-посилання, токени запрошень чи URL-адреси активації, щоб програмно завершувати багатоетапні потоки онбордингу.
Процес — тимчасова пошта Ruby за 3 виклики
Створіть одноразову скриньку
require "net/http"
require "json"
# Create a temp inbox that self-destructs after 30 minutes.
def create_inbox
uri = URI("https://evilmail.pro/api/temp-email")
req = Net::HTTP::Post.new(uri)
req["X-API-Key"] = ENV.fetch("EVILMAIL_KEY")
req["Content-Type"] = "application/json"
req.body = { ttlMinutes: 30 }.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(req)
end
data = JSON.parse(res.body).fetch("data")
[data["email"], data["sessionToken"]]
end
email, token = create_inbox
puts "Waiting for mail at #{email}"Опитуйте, доки не надійде лист
require "net/http"
require "json"
# Poll the inbox until a message lands (or we give up).
def wait_for_message(token, tries: 20, delay: 3)
uri = URI("https://evilmail.pro/api/temp-email/#{token}")
tries.times do
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = ENV.fetch("EVILMAIL_KEY")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(req)
end
msgs = JSON.parse(res.body).dig("data", "messages") || []
return msgs.first unless msgs.empty?
sleep delay # wait before the next attempt
end
raise "No message arrived in time"
end
message = wait_for_message(token)
puts "Got: #{message['subject']} (uid #{message['uid']})"Прочитайте повідомлення та витягніть код
require "net/http"
require "json"
# Fetch the full body and pull out a 6-digit OTP.
def extract_code(uid, token)
uri = URI("https://evilmail.pro/api/message/#{uid}?token=#{token}")
req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = ENV.fetch("EVILMAIL_KEY")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
http.request(req)
end
body = JSON.parse(res.body).fetch("data")
# First standalone 6-digit number, from text then html.
body["text"].to_s[/\b(\d{6})\b/, 1] ||
body["html"].to_s[/\b(\d{6})\b/, 1]
end
otp = extract_code(message["uid"], token)
puts "Verification code: #{otp}"Тимчасова пошта Ruby — FAQ
Q1Як отримати тимчасову поштову адресу в Ruby?−
Надішліть POST-запит на https://evilmail.pro/api/temp-email із заголовком X-API-Key і тілом JSON на кшталт {"ttlMinutes": 30}. У відповіді data.email — це ваша одноразова адреса, а data.sessionToken — це дескриптор, який ви використовуєте для опитування та читання вхідної пошти. Фрагмент коду вище робить саме це приблизно в десятці рядків net/http.
Q2Чи можу я використовувати це для автоматизованого тестування?+
Так — це основний сценарій використання. Оскільки це звичайний HTTP без залежності від браузера чи SMTP, воно чисто вбудовується в RSpec, Minitest або будь-яку CI-задачу. Створіть скриньку, запустіть лист, що тестується, опитуйте, доки він не надійде, і перевіряйте тему, тіло чи витягнутий код. Воно працює однаково на ноутбуці та в GitHub Actions чи GitLab CI.
Q3Як витягнути OTP?+
Прочитайте повідомлення через GET /api/message/{uid}?token={sessionToken}, а потім застосуйте regex до data.text (або data.html). Стандартний 6-значний одноразовий код відповідає /\b(\d{6})\b/ — використовуйте body["text"].to_s[/\b(\d{6})\b/, 1], щоб захопити перший збіг. Для magic-посилань чи токенів підставте шаблон, що відповідає формату вашого URL або токена.
Q4Чи потрібен мені ключ API / обмеження швидкості?+
Так, кожен запит потребує заголовка X-API-Key — зчитуйте його зі змінної середовища, наприклад ENV.fetch("EVILMAIL_KEY"), і ніколи не вписуйте його жорстко в код. Запити обмежені за швидкістю на кожен ключ; приклад опитування використовує інтервал у 3 секунди, що комфортно вкладається в ліміти для тестування та OTP-потоків.
Q5Як довго живе скринька?+
Ви керуєте часом життя за допомогою ttlMinutes під час створення скриньки — у прикладі використовується 30 хвилин. Щойно TTL спливає, адреса та її повідомлення автоматично відкидаються, тож нічого не потрібно очищати. Для триваліших наборів тестів запитуйте більший TTL або просто створюйте нову скриньку для кожного тестового випадку.
Тимчасова пошта іншими мовами
Один ключ API. Одноразові скриньки в масштабі.
Створюйте необмежену кількість тимчасових адрес, опитуйте їх через HTTP і витягуйте коди підтвердження прямо у ваші тести й CI. Безкоштовний старт; власні домени та вищі ліміти на платних тарифах.

