Geçici mail
Rust ile.
Rust için tek kullanımlık gelen kutuları ve OTP çıkarımı — düz HTTP, SDK yok.
use serde_json::{json, Value};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let key = std::env::var("EVILMAIL_KEY")?;
let res: Value = reqwest::blocking::Client::new()
.post("https://evilmail.pro/api/temp-email")
.header("X-API-Key", key)
.json(&json!({ "ttlMinutes": 30 }))
.send()?
.json()?;
let email = res["data"]["email"].as_str().unwrap_or("");
println!("Inbox: {email}");
Ok(())
}Bir Rust geçici e-posta gelen kutusu oluşturmak; gerçek bir posta kutusu ya da güvenilmez bir paylaşımlı hesap olmadan kayıt akışlarını, e-posta doğrulamasını ve OTP teslimatını test etmenizi sağlar. EvilMail düz bir HTTP API sunar: tek kullanımlık bir gelen kutusu oluşturun, gelen postaları için sorgulayın ve doğrulama kodunu doğrudan entegrasyon testlerinize veya CI hattınıza çekin. Çalıştırılacak bir SMTP sunucusu ya da pakete gömülecek bir SDK yoktur — yalnızca reqwest, serde_json ve bir ortam değişkeninden gelen bir API anahtarı.
Rust ile neden geçici mail kullanmalısınız
Uçtan uca kayıt testleri
Yeni bir tek kullanımlık e-posta kullanarak staging ortamınıza gerçek bir hesap kaydedin, ardından hoş geldin veya doğrulama mesajının gerçekten ulaştığını doğrulayın. Çalıştırmalar arasında temizlenecek paylaşımlı bir gelen kutusu yok.
OTP ve 2FA otomasyonu
Giriş veya doğrulama e-postasını bekleyin, altı haneli kodu gövdeden regex ile ayıklayın ve akışınıza geri besleyin. Rust'ta parolasız ve iki faktörlü girişleri test etmek için idealdir.
CI hattı e-posta kontrolleri
API anahtarını bir ortam değişkeninden okuyun ve tüm oluştur-sorgula-oku döngüsünü GitHub Actions veya GitLab CI içinde çalıştırın. Her derleme temiz, izole bir posta kutusu alır.
Doğrulama bağlantılarını kazıma
Etkinleştirme URL'lerini veya sihirli bağlantıları mesaj metninden ya da HTML'den alın, reqwest ile takip edin ve tüm katılım yolunun bir insan müdahalesi olmadan çalıştığını doğrulayın.
Akış — 3 çağrıda Rust geçici mail
Tek kullanımlık gelen kutusu oluşturun
use serde_json::{json, Value};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let key = std::env::var("EVILMAIL_KEY")?;
let client = reqwest::blocking::Client::new();
// Ask EvilMail for a fresh inbox that lives 30 minutes.
let res: Value = client
.post("https://evilmail.pro/api/temp-email")
.header("X-API-Key", &key)
.json(&json!({ "ttlMinutes": 30 }))
.send()?
.json()?;
let email = res["data"]["email"].as_str().unwrap_or("");
let token = res["data"]["sessionToken"].as_str().unwrap_or("");
println!("Inbox {email} ready (token {token})");
Ok(())
}E-posta ulaşana kadar sorgulayın
use serde_json::Value;
use std::{thread::sleep, time::Duration};
// Poll the session ~20 times, 3s apart, until mail lands.
fn wait_for_message(
client: &reqwest::blocking::Client,
key: &str,
token: &str,
) -> Result<u64, Box<dyn std::error::Error>> {
let url =
format!("https://evilmail.pro/api/temp-email/{token}");
for _ in 0..20 {
let res: Value = client
.get(&url)
.header("X-API-Key", key)
.send()?
.json()?;
// messages is empty until something is delivered.
if let Some(msg) = res["data"]["messages"].get(0) {
let uid = msg["uid"].as_u64().unwrap_or(0);
let subject = msg["subject"].as_str().unwrap_or("");
println!("Got mail: {subject} (uid {uid})");
return Ok(uid);
}
sleep(Duration::from_secs(3));
}
Err("timed out waiting for email".into())
}Mesajı okuyun ve kodu çıkarın
use regex::Regex;
use serde_json::Value;
// Fetch the message body and pull out a 6-digit OTP.
fn extract_code(
client: &reqwest::blocking::Client,
key: &str,
token: &str,
uid: u64,
) -> Result<Option<String>, Box<dyn std::error::Error>> {
let url = format!(
"https://evilmail.pro/api/message/{uid}?token={token}"
);
let res: Value = client
.get(&url)
.header("X-API-Key", key)
.send()?
.json()?;
let body = res["data"]["text"].as_str().unwrap_or("");
// A one-time code is six consecutive digits.
let re = Regex::new(r"\b(\d{6})\b")?;
let code = re.captures(body).map(|c| c[1].to_string());
match &code {
Some(c) => println!("OTP = {c}"),
None => println!("No 6-digit code found"),
}
Ok(code)
}Rust geçici mail — SSS
Q1Rust'ta nasıl geçici e-posta adresi alırım?−
https://evilmail.pro/api/temp-email adresine X-API-Key başlığınızla ve {"ttlMinutes": 30} gibi bir JSON gövdesiyle bir POST gönderin. Yanıt, data.email (tek kullanımlık adres) ve mesajları sorgulamak ve okumak için kullandığınız data.sessionToken alanlarını içerir. Hero parçacığına bakın — reqwest ve serde_json ile yaklaşık on satır.
Q2Bunu otomatik test için kullanabilir miyim?+
Evet — birincil kullanım senaryosu bu. API anahtarını bir ortam değişkeninden okuyun, her test için yeni bir gelen kutusu oluşturun ve oluştur-sorgula-oku döngüsünü entegrasyon paketinizin ya da CI'nizin içinde çalıştırın. Her gelen kutusu izole ve kısa ömürlü olduğundan testler birbirine karışmaz ve temizlenecek bir şey kalmaz.
Q3OTP'yi nasıl çıkarırım?+
Mesajı almak için GET /api/message/{uid}?token={sessionToken} çağrısını yapın, ardından data.text (veya data.html) üzerinde bir regex çalıştırın. Standart altı haneli tek kullanımlık bir kod için \b(\d{6})\b deseni işe yarar; yakalama grubu 1 koddur. Adım 3 parçacığı bunu regex crate'i ile gösterir.
Q4API anahtarına ihtiyacım var mı / hız sınırları var mı?+
Evet, her istek X-API-Key başlığına ihtiyaç duyar — anahtarı gömmek yerine EVILMAIL_KEY gibi bir ortam değişkeninde tutun. İstekler anahtar başına hız sınırlıdır, bu yüzden sorgularken sıkı bir döngü yerine makul bir aralığa bağlı kalın (örnekler ~20 sorgu denemesi arasında 3 saniye kullanır).
Q5Gelen kutusu ne kadar süre yaşar?+
Gelen kutusunu oluştururken ttlMinutes alanıyla bunu siz kontrol edersiniz — örnekler 30 dakika kullanır. TTL sona erdiğinde adres ve mesajları silinir, bu yüzden mesajı bu pencere içinde sorgulayıp okuyun. Çoğu doğrulama ve OTP akışı için 10 ila 30 dakikalık kısa bir TTL fazlasıyla yeterlidir.
Diğer dillerde geçici mail
Tek bir API anahtarı. Ölçekte tek kullanımlık gelen kutuları.
Sınırsız tek kullanımlık adres oluşturun, bunları HTTP üzerinden sorgulayın ve doğrulama kodlarını doğrudan testlerinize ve CI'nıza çekin. Başlaması ücretsiz; özel alan adları ve daha yüksek limitler ücretli planlarda.

