Python ile E-posta Doğrulama: Kodunuzdan Teslim Edilebilirlik Kontrolü
Bakımlı bir kütüphane ile adres formatını doğrulayın, ardından Python'dan tek tek, 100'erli gruplar halinde veya dosya bazında teslim edilebilirliği kontrol edin.

E-posta doğrulamaya yönelik bir Python rehberi: yerel format doğrulama, tekli ve çoklu adres teslim edilebilirlik kontrolleri ve asenkron toplu işlemler.
Python'da e-posta doğrulama iki aşamadan oluşur. Öncelikle email-validator gibi bakımlı bir kütüphane ile formatı yerel olarak doğrulayın, ardından kodunuzdan bir API çağırarak teslim edilebilirliği kontrol edin: Tek bir adres için EmailCheckPro'nun POST /api/v1/check uç noktasını, 1–100 adres için tek bir senkron istekte POST /api/v1/batch-check uç noktasını veya tüm dosyalar için en az 30 saniyede bir sorgulanan TXT/CSV toplu işlemlerini kullanın. Tamamlanan her kontrol, kontrol anında teslim edilebilir veya teslim edilemez sonucunu bildirir; bazı adresler ise Belirlenemedi olarak kalır. Kontrol işlemi adrese hiçbir şey göndermez.
Python'da format doğrulama ve teslim edilebilirlik kontrolleri karşılaştırması
Bu konudaki çoğu Python eğitimi üç tekniği birbirine karıştırır: bir Regex, alan adı üzerinde bir DNS sorgusu ve alıcının posta sunucusuyla konuşan bir betik. Bunlar farklı soruları yanıtlar ve sonuncusu gerçek riskler taşır.
| Teknik | Size ne anlatır | Temel kısıtlaması |
|---|---|---|
| Regex veya doğrulama kütüphanesi | Girdi tam bir adres gibi görünür | Posta kutusu hakkında hiçbir şey söylemez |
| Alan adı DNS sorgusu | Alan adı posta almaya hazır görünür | Bireysel adres hakkında hiçbir şey söylemez |
| Kendi posta sunucusu betiğiniz | Bazen alıcının kabul edilip edilmediğini | Birçok sunucu her şeyi kabul eder veya bilinmeyen arayanları reddeder; IP adresiniz engellenenler listesine girebilir |
| Teslim edilebilirlik kontrolü API'si | Kontrol anında teslim edilebilir veya teslim edilemez, hiçbir şey gönderilmez | Bazı adresler Belirlenemedi olarak kalır |
Pratik bir Python hattı, her girdi için ilk satırı, yeni kayıtlar, içe aktarımlar veya gönderim yapılacak bir liste gibi önemli adresler için ise son satırı kullanır. Onay bağlantıları, rıza ve sahiplik için ayrı bir adım olarak kalmalıdır.
1. Adım: email-validator ile formatı doğrulayın
email-validator paketi, okunabilir hata mesajları ve adresin normalleştirilmiş bir biçimini sunar; bu, elle yazılmış bir desenden daha iyi bir başlangıç noktasıdır.
from email_validator import validate_email, EmailNotValidError
def screen_format(raw: str) -> str | None:
try:
result = validate_email(raw.strip(), check_deliverability=False)
return result.normalized
except EmailNotValidError:
return None
Burada iki detay önemlidir:
- DNS adımını kapatın. Kütüphane varsayılan olarak alan adının posta alıp alamayacağını görmek için DNS sorgusu yapar. Bu alan adı düzeyinde bir sinyaldir, gecikme ekler ve teslim edilebilirlik API'si bu soruyu daha doğrudan kapsar; bu nedenle
check_deliverability=Falseayarı bu katmanı hızlı ve çevrimdışı tutar. - Normalleştirilmiş değeri saklayın. Kütüphane alan adını küçük harfe çevirir ve Unicode'u normalleştirir; bu, farklı yazımlarla yinelenen kayıtların sisteme girmesini engeller.
Hatalı bir girdi kullanıcıya geri gönderilmeli veya düzeltme listesine alınmalıdır. Bu, teslim edilemez bir sonuç değildir ve OWASP rehberliği, geçerli adresleri reddeden katı özel desenlere karşı uyarıda bulunur.
2. Adım: tek bir adres için teslim edilebilirliği kontrol edin
Bir kayıt ekranı veya profil düzenleme işlemi için sunucu kodundan requests kullanarak tekli uç noktayı çağırın.
import os
import requests
API_BASE = os.environ["EMAILCHECK_API_BASE"] # API dokümantasyonundan
session = requests.Session()
session.headers.update(build_headers()) # dokümante edildiği gibi yetkilendirme başlıkları
def check_one(email: str) -> str:
try:
resp = session.post(f"{API_BASE}/api/v1/check",
data=build_check_body(email), # dokümante edildiği gibi gövde
timeout=(3.05, 10))
return to_outcome(resp) # "deliverable" | "undeliverable" | "undetermined"
except requests.RequestException:
return "not_completed"
build_headers, build_check_body ve to_outcome küçük yardımcı fonksiyonlardır ve EmailCheckPro API dokümantasyonuna göre yazılmıştır; böylece kimlik doğrulama ve alan detayları tek bir yerde toplanır ve yayınlanan sözleşmeyle eşleşir. Düz dizeler döndürmek, kod tabanının geri kalanını yanıt formatından bağımsız tutar.
Her zaman bir zaman aşımı (timeout) değeri geçin. Requests dokümantasyonu, isteklerin varsayılan olarak zaman aşımına uğramadığını ve bir demetin (tuple) ayrı bağlantı ve okuma sınırları belirlediğini belirtir. Kendi sayfanızın toleransına göre değerler seçin; yukarıdaki sayılar örnektir.
Ardından dört durum için dallanma yapın:
- Teslim edilebilir: devam edin ve kontrol tarihini kaydedin.
- Teslim edilemez: başka bir adres isteyin.
- Belirlenemedi: örneğin bir catch-all adresi. Gerçek zamanlı API, sonuç yerine bir iş kodu döndürür ve kontrol ücretlendirilmez. Bir işaretçi ile kabul edin.
- Tamamlanmadı: bir zaman aşımı veya ağ hatası. Bir işaretçi ile kabul edin ve daha sonra bir kuyruktan tekrar kontrol edin.
3. Adım: istek başına 100 adrese kadar kontrol edin
Yönetici araçları, küçük içe aktarımlar ve gece çalışan işler genellikle birkaç düzine veya birkaç yüz adres içerir. POST /api/v1/batch-check, 1–100 arası adresi kabul eder ve sonuçları girdi sırasına göre aynı yanıt içinde verir.
def chunks(items, size=100):
for start in range(0, len(items), size):
yield items[start:start + size]
def check_many(emails: list[str]) -> dict[str, str]:
outcomes = {}
for group in chunks(emails):
items = post_multi(group) # POST /api/v1/batch-check
for email, item in zip(group, items):
outcomes[email] = item_outcome(item) # tamamlanmış sonuç yoksa -> "undetermined"
return outcomes
Sıralama korunduğu için zip her öğeyi onu üreten adresle eşleştirir. Her öğe ayrıca tamamlanmış bir sonucun var olup olmadığını belirtir. Sadece "1" değerine sahip öğeler teslim edilebilir veya teslim edilemez taşır; diğer her şey Belirlenemedi veya tamamlanmadı grubuna gider, asla teslim edilemez olarak işaretlenmez.
Normalleştirilmiş adresleri gruplara ayırmadan önce tekilleştirin, böylece aynı posta kutusu tek bir çalıştırmada iki kez kontrol edilmez. Kod yazmadan birkaç yüz adres için, kontrol panelinin gerçek zamanlı kontrolü tek seferde 500 adrese kadar işlem yapabilir.
4. Adım: tüm dosyalar için toplu işlem çalıştırın
Kaynak bir dışa aktarma dosyası olduğunda, toplu işlem daha uygundur. Bu asenkron bir işlemdir, bu nedenle bir web görünümü yerine bir betikten, zamanlanmış bir işten veya Celery gibi bir işçiden (worker) çalıştırın.
- Dosyayı yazın. Satır başına bir tam adres olacak şekilde TXT veya CSV üretin. Python'un yerleşik dosya yazma özelliği TXT için yeterlidir; csv modülü bir e-tablo dışa aktarımından başladığınızda yardımcı olur.
- Görevi gönderin ve referansı kaydedin. Dosya adı ve zamanla birlikte veritabanınızda saklayın, böylece yeniden başlatılan bir işçi kaldığı yerden devam edebilir.
- Sabırla sorgulayın. 30 saniye veya daha uzun aralıklarla:
import time
def run_bulk(path: str) -> str:
task_ref = submit_file(path) # POST /api/v1/bulk-tasks
save_task(task_ref, path) # işçi yeniden başlatmalarına karşı koruma
while True:
status = get_status(task_ref) # GET /api/v1/bulk-tasks/{id}
if status.finished:
return status.result_link # 12 saat boyunca geçerli
time.sleep(30) # asla bundan daha hızlı sorgulamayın
- İndirin ve birleştirin. Başarılı bir görev, 12 saat geçerli olan bir bağlantıda bir CSV döndürür; bağlantı süresi dolarsa aynı görevi tekrar sorgulayarak yeni bir bağlantı alın.
csv.DictReaderile okuyun ve satır numarasına göre değil, e-posta adresine göre birleştirin, çünkü geçersiz ve yinelenen satırlar hazırlık sırasında kaldırılır.
Teslim edilebilirlik CSV'si her adresi sonucuyla eşleştirir. Gmail, Yandex ve Mail.ru listeleri için Email Bulk Avatar Check, avatar sütunları ekler; avatar bağlantısı, bir avatar mevcut olduğunda bile boş olabilir. Ürün bazlı görev sınırları API dokümantasyonunda listelenmiştir.
Python entegrasyonunu güvenilir tutmak
- Anahtarı kodun dışında tutun. Bir ortam değişkeninden veya gizli depo (secret store) üzerinden okuyun; web kontrolleri, API çağrıları, toplu işlemler ve MCP erişimi tarafından paylaşılan hesap bakiyesini kullanır.
- Bir
Sessionnesnesini yeniden kullanın. Bağlantıları çağrılar arasında açık tutar, bu da çoklu adres grupları üzerindeki döngülerde yardımcı olur. - Tarihleri kaydedin. Bir sonuç, adresi kontrol anındaki durumuyla tanımlar, bu nedenle tarihi saklayın ve büyük bir gönderimden önce eski satırları tekrar kontrol edin.
- Yeniden denemeleri kuyruğa alın. Belirlenemedi, başarısız ve geçersiz kontroller ücretlendirilmez, ancak anında yeniden denemeler sonucu nadiren değiştirir. Bunları bir gecikme ve üst sınır ile planlayın.
- Dalları test edin. API'yi çağıran yardımcı fonksiyonu taklit edin (mock) ve her durumun doğru mesaja veya kuyruğa ulaştığından emin olun.
- Yapay zeka not defterleri ve asistanlar:
https://emailcheckpro.com/mcpadresindeki MCP uç noktası, tekli kontrolleri ve 100 adrese kadar olan işlemleri destekler; dosya görevleri REST API üzerinde kalır.
SSS
E-posta formatı doğrulaması için en iyi Python kütüphanesi hangisidir?
email-validator, net hata mesajları verdiği, uluslararası alan adlarını desteklediği ve normalleştirilmiş bir adres döndürdüğü için yaygın olarak tercih edilen bir seçenektir. Bir ekibin hangi kütüphaneyi seçtiği önemli değildir; önemli olan formlar, içe aktarımlar ve betikler genelinde tek bir doğruluk kaynağı kullanmak ve ayrı bir teslim edilebilirlik kontrolü zaten adresin posta alıp alamadığını kapsadığında isteğe bağlı DNS sorgularını devre dışı bırakmaktır.
Ekipler Python'dan büyük bir CSV adres listesini nasıl kontrol edebilir?
Satır başına bir tam adres olacak şekilde bir TXT veya CSV dosyası yazın, bunu toplu işlem olarak gönderin ve durumunu arka plan işinden 30 saniyede bir sorgulayın. Başarılı olduğunda, tek sonuç CSV'sini 12 saat içinde indirin veya yeni bir bağlantı için görevi tekrar sorgulayın ve sonuçları e-posta adresine göre birleştirin.
Neden kendi yazdığım bir Python posta sunucusu betiğiyle posta kutularını doğrulamayayım?
Birçok posta sunucusu her alıcıyı kabul eder, bilinmeyen arayanları geciktirir veya tekrarlanan bağlantıları engeller; bu nedenle betikler çok sayıda sonuçsuz yanıt döndürür ve gönderen IP adresinizin engellenmesine neden olabilir. Barındırılan bir teslim edilebilirlik kontrolü, adrese hiçbir şey göndermeden teslim edilebilir veya teslim edilemez sonucunu döndürür ve çözemediği adresleri tahmin etmek yerine Belirlenemedi olarak işaretler.
Daha Fazla Bilgi
İş akışınızın bir sonraki adımına uygun ürün bilgilerini seçin.