Geçici mail
Go ile.
Go için tek bir HTTP çağrısıyla kullan-at e-posta.
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
req, _ := http.NewRequest("POST",
"https://evilmail.pro/api/temp-email",
bytes.NewBufferString(`{"ttlMinutes": 30}`))
req.Header.Set("X-API-Key", os.Getenv("EVILMAIL_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var r struct {
Data struct {
Email string `json:"email"`
SessionToken string `json:"sessionToken"`
} `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&r)
fmt.Println("Inbox ready:", r.Data.Email)
}Go'da geçici e-postayı birkaç satırda ayağa kaldırın: EvilMail'in kullan-at e-posta API'si, tek kullanımlık gelen kutuları oluşturmanıza, gelen mesajları yoklamanıza ve OTP kodlarını doğrudan test paketinizden veya CI hattınızdan çıkarmanıza olanak tanır. Gerçek bir posta kutusuyla uğraşmak veya bir web arayüzünü kazımak yerine, net/http ile düz HTTP uç noktalarına istek gönderir ve JSON'u çözersiniz — üçüncü taraf bir SDK yok, başsız tarayıcı yok. Go e-posta doğrulama testleri, kayıt akışı duman testleri ve talep üzerine gerçek, mesaj alabilen bir adrese ihtiyaç duyduğunuz her iş akışı için tasarlanmıştır.
Go ile neden geçici mail kullanmalısınız
Otomatik kayıt testi
Her uçtan uca test çalışması için Go'da yeni bir kullan-at e-posta kaydedin, böylece hesaplar asla çakışmaz. Her gelen kutusu gerçek ve mesaj alabilir olduğundan, kayıt akışınız tıpkı üretimdeki gibi davranır.
OTP ve e-posta doğrulama
Gelen kutusunu yoklayın, onay e-postasını alın ve 6 haneli kodu regex ile ayıklayın — hepsi tek bir Go rutininde. İnsan müdahalesi olmadan doğrulama ve iki faktörlü akışları test etmek için mükemmel.
CI/CD hatları
Yalnızca net/http ve bir ortam değişkeninden gelen API anahtarı olduğundan, aynı kod hem yerelde hem de GitHub Actions veya GitLab CI'da çalışır. SMTP sunucusu yok, döndürülecek posta kutusu kimlik bilgisi yok.
Yük ve çoklu hesap testi
Aynı anda yüzlerce kullanıcının kayıt olmasını simüle etmek için goroutine'lerle eşzamanlı olarak birçok bağımsız gelen kutusu oluşturun. Her oturum belirteci bir posta kutusunu izole eder, böylece paralel testler temiz kalır.
Akış — 3 çağrıda Go geçici mail
Kullan-at bir gelen kutusu oluştur
// createInbox spins up a disposable EvilMail inbox and
// returns its address plus the session token used to poll it.
func createInbox(key string) (email, token string, err error) {
body := bytes.NewBufferString(`{"ttlMinutes": 30}`)
req, err := http.NewRequest("POST",
"https://evilmail.pro/api/temp-email", body)
if err != nil {
return "", "", err
}
req.Header.Set("X-API-Key", key)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "", "", err
}
defer resp.Body.Close()
var r struct {
Data struct {
Email string `json:"email"`
SessionToken string `json:"sessionToken"`
} `json:"data"`
}
if err := json.NewDecoder(resp.Body).Decode(&r); err != nil {
return "", "", err
}
return r.Data.Email, r.Data.SessionToken, nil
}E-posta gelene kadar yokla
// Message mirrors one row from the inbox listing.
type Message struct {
UID int `json:"uid"`
From string `json:"from"`
Subject string `json:"subject"`
}
// waitForMessage polls the inbox ~20 times, 3s apart, until at
// least one message lands, then returns the first one.
func waitForMessage(key, token string) (Message, error) {
url := "https://evilmail.pro/api/temp-email/" + token
for i := 0; i < 20; i++ {
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("X-API-Key", key)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return Message{}, err
}
var r struct {
Data struct {
Messages []Message `json:"messages"`
} `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&r)
resp.Body.Close()
if len(r.Data.Messages) > 0 {
return r.Data.Messages[0], nil
}
time.Sleep(3 * time.Second) // wait, then retry
}
return Message{}, fmt.Errorf("timed out waiting for email")
}Mesajı oku ve kodu çıkar
// otpRe matches a standalone 6-digit verification code.
var otpRe = regexp.MustCompile(`\b(\d{6})\b`)
// readCode fetches a message body and pulls the 6-digit OTP.
func readCode(key, token string, uid int) (string, error) {
url := fmt.Sprintf(
"https://evilmail.pro/api/message/%d?token=%s", uid, token)
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("X-API-Key", key)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
var r struct {
Data struct {
Text string `json:"text"`
HTML string `json:"html"`
} `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&r)
// Regex over the plain-text body (fall back to HTML).
m := otpRe.FindStringSubmatch(r.Data.Text)
if m == nil {
return "", fmt.Errorf("no 6-digit code found")
}
return m[1], nil
}Go geçici mail — SSS
Q1Go'da geçici bir mail adresini nasıl alırım?−
X-API-Key başlığınız ve {"ttlMinutes": 30} gibi bir JSON gövdesiyle https://evilmail.pro/api/temp-email adresine bir POST isteği gönderin. Yanıt, data.email (adres) ve data.sessionToken (o gelen kutusunu yoklamak için kullanılır) içerir. Yukarıdaki createInbox fonksiyonu tam olarak bunu net/http ve encoding/json ile yapar — SDK gerekmez.
Q2Bunu otomatik testler için kullanabilir miyim?+
Evet, birincil kullanım senaryosu budur. Tüm akış düz HTTP olduğundan, doğrudan Go test dosyalarına, CI işlerine veya yük betiklerine yerleşir. API anahtarını EVILMAIL_KEY gibi bir ortam değişkeninden okuyun, her test için bir gelen kutusu oluşturun ve TTL süresi dolduğunda kaldırın. Paralel testler için goroutine'lerle aynı anda birçok gelen kutusu oluşturabilirsiniz.
Q3Bir e-postadan OTP'yi nasıl çıkarırım?+
Yoklama bir mesaj döndürdükten sonra, gövdesini almak için https://evilmail.pro/api/message/{uid}?token={sessionToken} adresine GET isteği yapın. Ardından data.text (veya data.html) üzerinde bir regexp çalıştırın. Bağımsız bir 6 haneli kod \b(\d{6})\b desenine uyar — bir kez regexp.MustCompile edin ve readCode'da gösterildiği gibi rakamları yakalamak için FindStringSubmatch kullanın.
Q4Bir API anahtarına ihtiyacım var mı ve hız sınırları var mı?+
Evet — her istek anahtarınızı X-API-Key başlığında göndermelidir ve mesaj okumaları da bunu gerektirir. Anahtarı asla koda gömmeyin; bir ortam değişkeninden yükleyin. Hız sınırları anahtar başına uygulanır ve normal test ve CI kullanımı için yeterince cömerttir; ağır yük testleri çalıştırıyorsanız çağrılar arasına küçük bir bekleme ekleyin (yoklama döngüsü zaten denemeler arasında 3 sn uyur).
Q5Gelen kutusu ne kadar süre yaşar?+
Gelen kutusunun ömrü, oluştururken geçirdiğiniz ttlMinutes değeriyle belirlenir — örneğin 30 dakika. TTL süresi dolduğunda, gelen kutusu ve mesajları temizlenir ve oturum belirteci artık mesaj döndürmez, bu yüzden eski bir belirteci yeniden kullanmak yerine her çalışma için yeni bir gelen kutusu oluşturun.
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.

