Verifikasi Email dengan Python: Memeriksa Keterkiriman dari Kode Anda
Validasi format alamat dengan pustaka terawat, lalu periksa keterkiriman dari Python untuk satu alamat, 100 sekaligus, atau satu file penuh.

Panduan Python untuk verifikasi email: validasi format lokal, pemeriksaan keterkiriman untuk satu atau banyak alamat, dan tugas massal asinkron.
Verifikasi email dalam Python terdiri dari dua bagian. Validasi format secara lokal dengan pustaka terawat seperti email-validator, lalu periksa keterkiriman dengan memanggil API dari kode Anda: POST /api/v1/check dari EmailCheckPro untuk satu alamat, POST /api/v1/batch-check untuk 1–100 alamat dalam satu permintaan sinkron, atau tugas massal TXT/CSV yang dipantau (polling) tidak lebih sering dari setiap 30 detik untuk file lengkap. Setiap pemeriksaan yang selesai melaporkan Dapat dikirimi atau Tidak dapat dikirimi pada saat pemeriksaan, dan beberapa alamat tetap Tidak dapat ditentukan. Pemeriksaan ini tidak mengirimkan apa pun ke alamat tersebut.
Validasi format vs pemeriksaan keterkiriman dalam Python
Sebagian besar tutorial Python mengenai topik ini mencampurkan tiga teknik: regex, pencarian DNS pada domain, dan skrip yang berkomunikasi dengan server email penerima. Ketiganya menjawab pertanyaan yang berbeda, dan teknik terakhir membawa risiko nyata.
| Teknik | Apa yang diberitahukan kepada Anda | Keterbatasan utama |
|---|---|---|
| Regex atau pustaka validasi | Input terlihat seperti alamat lengkap | Tidak memberikan informasi tentang kotak surat |
| Pencarian DNS domain | Domain tampak diatur untuk menerima email | Tidak memberikan informasi tentang alamat individu |
| Skrip server email buatan sendiri | Terkadang apakah penerima diterima | Banyak server menerima segalanya atau menolak pemanggil yang tidak dikenal, dan IP Anda bisa berakhir di daftar blokir |
| API pemeriksaan keterkiriman | Dapat dikirimi atau Tidak dapat dikirimi pada saat pemeriksaan, tanpa mengirim apa pun | Beberapa alamat tetap Tidak dapat ditentukan |
Alur kerja Python yang praktis menggunakan baris pertama untuk setiap input dan baris terakhir untuk alamat yang penting, seperti pendaftaran baru, impor, atau daftar yang akan dikirimi email. Tautan konfirmasi tetap menjadi langkah terpisah untuk persetujuan dan kepemilikan.
Langkah 1: validasi format dengan email-validator
Paket email-validator memberikan pesan kesalahan yang mudah dibaca dan bentuk alamat yang dinormalisasi, yang merupakan titik awal yang lebih baik daripada pola buatan sendiri.
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
Dua detail penting di sini:
- Matikan langkah DNS-nya. Secara default, pustaka ini menanyakan DNS untuk melihat apakah domain dapat menerima email. Itu adalah sinyal tingkat domain, menambah latensi, dan API keterkiriman mencakup pertanyaan tersebut secara lebih langsung, jadi
check_deliverability=Falsemenjaga lapisan ini tetap cepat dan offline. - Simpan nilai yang dinormalisasi. Pustaka ini mengubah domain menjadi huruf kecil dan menormalisasi Unicode, yang mencegah duplikat masuk dengan ejaan yang berbeda.
Entri yang salah format harus dikembalikan ke pengguna atau dimasukkan ke dalam daftar perbaikan. Itu bukan hasil Tidak dapat dikirimi, dan panduan OWASP menyarankan untuk tidak menggunakan pola kustom yang ketat yang menolak alamat yang valid.
Langkah 2: periksa keterkiriman untuk satu alamat
Untuk tampilan pendaftaran atau pengeditan profil, panggil endpoint tunggal dari kode server menggunakan requests.
import os
import requests
API_BASE = os.environ["EMAILCHECK_API_BASE"] # dari dokumentasi API
session = requests.Session()
session.headers.update(build_headers()) # header otentikasi persis seperti yang didokumentasikan
def check_one(email: str) -> str:
try:
resp = session.post(f"{API_BASE}/api/v1/check",
data=build_check_body(email), # body seperti yang didokumentasikan
timeout=(3.05, 10))
return to_outcome(resp) # "deliverable" | "undeliverable" | "undetermined"
except requests.RequestException:
return "not_completed"
build_headers, build_check_body, dan to_outcome adalah pembantu kecil yang ditulis berdasarkan dokumentasi API EmailCheckPro, sehingga otentikasi dan detail bidang berada di satu tempat dan sesuai dengan kontrak yang dipublikasikan. Mengembalikan string biasa menjaga sisa basis kode tetap independen dari format respons.
Selalu sertakan batas waktu (timeout). Dokumentasi Requests mencatat bahwa permintaan tidak memiliki batas waktu secara default dan bahwa tuple menetapkan batas koneksi dan baca yang terpisah. Pilih nilai dari toleransi halaman Anda sendiri; angka di atas hanyalah contoh.
Kemudian buat percabangan pada empat status:
- Dapat dikirimi: lanjutkan dan simpan tanggal pemeriksaan.
- Tidak dapat dikirimi: minta alamat lain.
- Tidak dapat ditentukan: misalnya alamat catch-all. API realtime mengembalikan kode bisnis alih-alih hasil, dan pemeriksaan tidak dikenakan biaya. Terima dengan tanda (flag).
- Tidak selesai: batas waktu atau kesalahan jaringan. Terima dengan tanda dan periksa kembali nanti dari antrean.
Langkah 3: periksa hingga 100 alamat per permintaan
Alat admin, impor kecil, dan pekerjaan malam hari sering kali menangani beberapa lusin atau beberapa ratus alamat. POST /api/v1/batch-check menerima 1–100 alamat dan menjawab dalam respons yang sama, dengan hasil sesuai urutan input.
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) # tidak ada hasil selesai -> "undetermined"
return outcomes
Karena urutan dipertahankan, zip memetakan setiap item kembali ke alamat yang menghasilkannya. Setiap item juga menyatakan apakah hasil yang selesai ada. Hanya item dengan satu hasil yang membawa Dapat dikirimi atau Tidak dapat dikirimi; yang lainnya masuk ke grup Tidak dapat ditentukan atau Tidak selesai, tidak pernah ke Tidak dapat dikirimi.
Hapus duplikat alamat yang dinormalisasi sebelum melakukan chunking, sehingga kotak surat yang sama tidak diperiksa dua kali dalam satu proses. Untuk beberapa ratus alamat tanpa kode, pemeriksaan realtime dasbor menangani hingga 500 alamat sekaligus.
Langkah 4: jalankan tugas massal untuk file lengkap
Setelah sumbernya berupa ekspor, tugas massal adalah pilihan yang lebih tepat. Tugas ini bersifat asinkron, jadi jalankan dari skrip, pekerjaan terjadwal, atau pekerja seperti Celery alih-alih tampilan web.
- Tulis file. Buat TXT atau CSV dengan satu alamat lengkap per baris. Penulisan file bawaan Python sudah cukup untuk TXT; modul csv membantu saat Anda memulai dari ekspor spreadsheet.
- Kirim dan simpan referensi tugas di database Anda, dengan nama file dan waktu, sehingga pekerja yang dimulai ulang dapat melanjutkannya.
- Pantau dengan sabar pada interval 30 detik atau lebih:
import time
def run_bulk(path: str) -> str:
task_ref = submit_file(path) # POST /api/v1/bulk-tasks
save_task(task_ref, path) # bertahan dari restart pekerja
while True:
status = get_status(task_ref) # GET /api/v1/bulk-tasks/{id}
if status.finished:
return status.result_link # berlaku selama 12 jam
time.sleep(30) # jangan pernah memantau lebih cepat dari ini
- Unduh dan gabungkan. Tugas yang berhasil mengembalikan satu CSV di tautan yang bertahan selama 12 jam; kueri tugas yang sama lagi untuk mendapatkan tautan baru jika tautan tersebut kedaluwarsa. Baca dengan
csv.DictReaderdan gabungkan berdasarkan alamat email, bukan nomor baris, karena baris yang tidak valid dan duplikat dihapus selama persiapan.
CSV keterkiriman memasangkan setiap alamat dengan hasilnya. Untuk daftar Gmail, Yandex, dan Mail.ru, Pemeriksaan Avatar Email Massal menambahkan kolom avatar; tautan avatarnya bisa kosong bahkan ketika avatar ada. Batas tugas per produk tercantum dalam dokumentasi API.
Menjaga integrasi Python tetap andal
- Jauhkan kunci dari kode. Baca dari variabel lingkungan atau penyimpanan rahasia; kunci tersebut menggunakan saldo akun yang dibagikan oleh pemeriksaan web, panggilan API, tugas massal, dan akses MCP.
- Gunakan kembali
Session. Ini menjaga koneksi tetap terbuka di seluruh panggilan, yang membantu perulangan pada chunk multi-alamat. - Catat tanggal. Hasil menjelaskan alamat pada saat pemeriksaan, jadi simpan tanggal dan periksa kembali baris yang lebih lama sebelum pengiriman besar.
- Antrekan percobaan ulang. Pemeriksaan yang Tidak dapat ditentukan, gagal, dan tidak valid tidak dikenakan biaya, tetapi percobaan ulang segera jarang mengubah hasil. Jadwalkan dengan penundaan dan batas.
- Uji percabangan. Mock pembantu yang memanggil API dan pastikan setiap status mencapai pesan atau antrean yang tepat.
- Notebook AI dan asisten: endpoint MCP di
https://emailcheckpro.com/mcpmendukung pemeriksaan tunggal dan hingga 100 alamat; tugas file tetap menggunakan REST API.
FAQ
Pustaka Python mana yang terbaik untuk validasi format email?
email-validator adalah pilihan yang banyak digunakan karena memberikan pesan kesalahan yang jelas, mendukung domain internasional, dan mengembalikan alamat yang dinormalisasi. Pustaka apa pun yang dipilih tim, kuncinya adalah menggunakan satu sumber kebenaran di seluruh formulir, impor, dan skrip, serta menonaktifkan pencarian DNS opsional ketika pemeriksaan keterkiriman terpisah sudah mencakup apakah alamat tersebut dapat menerima email.
Bagaimana tim dapat memeriksa CSV alamat yang besar dari Python?
Tulis file TXT atau CSV dengan satu alamat lengkap per baris, kirimkan sebagai tugas massal, dan pantau statusnya dari pekerjaan latar belakang tidak lebih sering dari setiap 30 detik. Saat berhasil, unduh CSV hasil tunggal dalam waktu 12 jam, atau kueri tugas lagi untuk mendapatkan tautan baru, dan gabungkan hasil kembali berdasarkan alamat email.
Mengapa tidak memverifikasi kotak surat dengan skrip server email Python buatan sendiri?
Banyak server email menerima setiap penerima, menunda pemanggil yang tidak dikenal, atau memblokir koneksi berulang, sehingga skrip mengembalikan banyak jawaban yang tidak meyakinkan dan dapat menyebabkan IP pengirim masuk daftar blokir. Pemeriksaan keterkiriman yang dihosting mengembalikan Dapat dikirimi atau Tidak dapat dikirimi tanpa mengirim apa pun ke alamat tersebut, dan menandai alamat yang tidak dapat diselesaikan sebagai Tidak dapat ditentukan alih-alih menebak.
Pelajari Lebih Lanjut
Pilih informasi produk yang sesuai dengan langkah berikutnya dalam alur kerja Anda.