Python ile E-posta Onay Kodu Alma: Gmail OTP API Örneği

Bir Python betiğinde e-postaya gelen doğrulama kodunu (onay kodunu) okumak üç HTTP çağrısına iner: gelen kutusunu kiralamak, kod gelene kadar sorgulamak ve vazgeçerseniz siparişi iptal etmek. Bu rehber, OTPGmail'in REST API'si üzerinden bu akışı yalnızca requests ve standart kütüphaneyle kurar. Açıklamalar Türkçe, kod İngilizcedir.

Bu örnek, kendi kayıt akışlarınızı test eden geliştiriciler ve QA ekipleri için yazıldı. Üçüncü taraf bir platformda kayıt yapıyorsanız o platformun kullanım şartlarına uymak sizin sorumluluğunuzdadır.

Başlamadan önce

Akış: üç çağrı

  1. POST /v1/orders ile seçtiğiniz hizmet için bir adres kiralayın.
  2. GET /v1/orders/{orderId} ile her 3–5 saniyede bir sorgulayın; otp dizisi dolunca kod gelmiştir.
  3. Beklemekten vazgeçerseniz POST /v1/orders/{orderId}/cancel çağırın; ilk kod gelmediyse tutarın %100'ü iade edilir.

Siz hiçbir şey yapmasanız da kod gelmeyen sipariş, bekleme süresi (en fazla 25 dakika) dolunca kendiliğinden iptal olur ve iade edilir. Yani üçüncü adım bir zorunluluk değil, bakiyenizi daha erken geri almanın yoludur.

Gelen kutusu kiralama

import time
import uuid
import requests

HOST = "otpgmail.net"
BASE = f"https://{HOST}/v1"
HEADERS = {"Authorization": "Bearer og_YOUR_API_KEY"}


def rent(service, domain="gmail.com"):
    resp = requests.post(
        f"{BASE}/orders",
        json={"service": service, "domain": domain},
        headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
        timeout=15,
    )
    body = resp.json()
    if not body.get("success"):
        raise RuntimeError(body["error"]["code"])
    return body["data"][0]  # data bir dizidir: her gelen kutusu için bir sipariş

domain isteğe bağlıdır; göndermezseniz gmail.com kullanılır, hizmet destekliyorsa icloud.com gönderebilirsiniz. Idempotency-Key başlığı önemlidir: her yeni sipariş için yeni bir UUID üretin, zaman aşımından sonra aynı siparişi yeniden denerken aynı anahtarı kullanın; böylece ikinci bir gelen kutusu için ücret ödemezsiniz. Sipariş çağrısı yoğun anlarda birkaç saniye sürebileceği için istemci zaman aşımını yaklaşık 15 saniye tutun.

Standart kütüphanedeki urllib yerine requests kullanın: urllib'in varsayılan kullanıcı aracısı API'nin önündeki CDN tarafından reddedilebilir.

Kodu bekleme ve iptal

def wait_for_code(order_id, max_wait=600, interval=4):
    deadline = time.time() + max_wait
    while time.time() < deadline:
        resp = requests.get(f"{BASE}/orders/{order_id}", headers=HEADERS, timeout=15)
        order = resp.json()["data"]
        if order["otp"]:
            return order["otp"][-1]["code"]  # en yeni kod dizinin sonundadır
        if order["status"] == "cancelled":
            return None  # bekleme süresi doldu, ücret iade edildi
        time.sleep(interval)
    # Kendi sınırınız doldu: ilk koddan önce iptal edip iade alın
    requests.post(f"{BASE}/orders/{order_id}/cancel", headers=HEADERS, timeout=15)
    return None

3–5 saniyelik aralık hem kodu hızlı yakalar hem de hız sınırının çok altında kalır. otp dizisi en eskiden en yeniye sıralıdır, bu yüzden otp[-1] her zaman son kodu verir. Bazı hizmetler kod yerine doğrulama bağlantısı gönderir; bu durumda bağlantı da code alanında gelir. Hizmet birden fazla kod gönderiyorsa sonraki kodlar sipariş süresi içinde dizinin sonuna kendiliğinden eklenir; birçok hizmet ise yalnızca tek kod gönderir.

Hepsini birleştirmek

try:
    order = rent("git", domain="icloud.com")
except RuntimeError as e:
    if str(e) in ("DOMAIN_UNAVAILABLE", "NO_MAILS_AVAILABLE", "OUT_OF_STOCK"):
        order = rent("git", domain="gmail.com")  # Gmail ile yeniden dene
    else:
        raise

print("Adres:", order["email"])
# Bu adresi kayıt formuna yazıp gönderin, sonra beklemeye başlayın
code = wait_for_code(order["orderId"])
print("Kod:", code or "gelmedi")

Adresi hedef sitenin formuna yazıp kodu istedikten sonra beklemeye başlayın; form gönderilmeden kod oluşmaz. Gmail ile iCloud arasındaki farklar için iCloud mail kiralama mı, Gmail mi rehberine, GitHub'a özel notlar için GitHub için Gmail kiralama sayfasına bakın.

curl ile aynı akış

HOST=otpgmail.net
KEY=og_YOUR_API_KEY

# Sipariş aç
curl -s -X POST "https://$HOST/v1/orders" \
  -H "Authorization: Bearer $KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"service":"git","domain":"gmail.com"}'

# Siparişi sorgula (3-5 saniyede bir)
curl -s "https://$HOST/v1/orders/ORDER_ID" -H "Authorization: Bearer $KEY"

# İlk koddan önce iptal et
curl -s -X POST "https://$HOST/v1/orders/ORDER_ID/cancel" -H "Authorization: Bearer $KEY"

Hata kodları

İsteğe bağlı warehouse alanıyla kaynak seçebilirsiniz: 0 stokta olan en ucuz kaynağı, 99 ise biri tükendiğinde sıradakine geçen otomatik seçimi kullanır. 99 ile tüm kaynaklar denenip gelen kutusu bulunamazsa ALL_WAREHOUSES_EXHAUSTED döner ve ücret kesilmez.

Test otomasyonu için ipuçları

Python, Node.js, PHP, C# ve curl için hazır istemciler herkese açık otpgmail-email-otp-api deposunda. İade kurallarının tamamı iade ve garanti politikası sayfasında; API anahtarınızı almak için uygulamaya giriş yapın.

Sıkça sorulan sorular

Neden Idempotency-Key başlığı gerekiyor?

Bağlantı koptuğunda yeniden gönderilen isteğin ikinci bir gelen kutusu kiralamaması için. Aynı anahtarı yalnızca aynı siparişi yeniden denerken kullanın, her yeni sipariş için yeni bir UUID üretin.

max_wait değerini ne kadar tutmalıyım?

Hizmete bağlıdır: GitHub gibi bazı hizmetler kodu genellikle bir dakikadan kısa sürede gönderir, bazıları birkaç dakika sürer. Bekleme süresinden uzun bir değer vermenin etkisi yoktur; sistem kod gelmeyen siparişi o noktada iptal edip iade eder.

Tek çağrıda birden fazla gelen kutusu kiralayabilir miyim?

Evet, istek gövdesine quantity alanı ekleyin (en fazla 200). Bu durumda data dizisi her gelen kutusu için bir sipariş içerir.

Kod gelmeden önce otp[-1] ne döndürür?

otp ilk kod gelene kadar boş bir dizidir, bu yüzden otp[-1] hata verir. Örnekteki if order["otp"]: kontrolü tam olarak bunu önler.

İlgili rehberler

Doğrulama kodunuzu şimdi alın

Kayıt ücret gerektirmez. Ücret yalnızca gelen kutusu teslim edildiğinde kesilir; bekleme süresinde (en fazla 25 dakika) kod gelmezse tutarın %100'ü otomatik olarak iade edilir.

Aradığınız hizmet listede yok mu? Kiralama sayfasındaki Hizmet ekle düğmesiyle istekte bulunun; yönetici isteği inceler ve altyapı destekliyorsa hizmeti ekler.

Yalnızca kod değil, giriş yapabileceğiniz bir Gmail hesabı mı lazım? Kısa ömürlü Gmail hesabı sayfasına göz atın · İade ve garanti