EmailVerify LogoEmailVerify

Python SDK

Python email checker SDK. pip install, verify emails with Python. Code examples and async support.

De officiële EmailVerify SDK voor Python biedt zowel synchrone als asynchrone interfaces voor e-mailverificatie.

Installatie

pip install emailverify

Met Async Ondersteuning

pip install emailverify[async]

Snelstart

import os
from emailverify import Client

client = Client(api_key=os.environ['EMAILVERIFY_API_KEY'])

# Verifieer een enkel e-mailadres
result = client.verify('user@example.com')
print(f"Status: {result.status}")  # 'valid', 'invalid', 'unknown', of 'accept_all'

Configuratie

Client Opties

from emailverify import Client

client = Client(
    api_key='your-api-key',

    # Optionele configuraties
    timeout=30,               # Request timeout in seconden
    retries=3,                # Aantal herhaalpogingen
    base_url='https://api.emailverify.ai',  # Aangepaste API URL
)

Omgevingsvariabelen

# .env
EMAILVERIFY_API_KEY=your_api_key_here
import os
from emailverify import Client

client = Client(api_key=os.environ['EMAILVERIFY_API_KEY'])

Enkele E-mailverificatie

Basis Verificatie

result = client.verify('user@example.com')

print({
    'email': result.email,
    'status': result.status,
    'score': result.score,
    'deliverable': result.result.deliverable,
    'disposable': result.result.disposable,
    'role': result.result.role,
})

Verificatie met Opties

result = client.verify(
    'user@example.com',
    smtp_check=True,      # SMTP verificatie inschakelen
    timeout=5,            # Aangepaste timeout voor dit verzoek
)

Antwoordobject

@dataclass
class VerificationResult:
    email: str
    status: str  # 'valid', 'invalid', 'unknown', 'accept_all'
    result: ResultDetails
    score: float
    reason: Optional[str]

@dataclass
class ResultDetails:
    deliverable: Optional[bool]
    valid_format: bool
    valid_domain: bool
    valid_mx: bool
    disposable: bool
    role: bool
    catchall: bool
    free: bool
    smtp_valid: Optional[bool]

Async Gebruik

Voor hoge-prestatie applicaties, gebruik de async client:

import asyncio
from emailverify import AsyncClient

async def main():
    client = AsyncClient(api_key=os.environ['EMAILVERIFY_API_KEY'])

    # Enkele verificatie
    result = await client.verify('user@example.com')
    print(result.status)

    # Verifieer meerdere e-mails gelijktijdig
    emails = ['user1@example.com', 'user2@example.com', 'user3@example.com']
    results = await asyncio.gather(*[client.verify(email) for email in emails])

    for result in results:
        print(f"{result.email}: {result.status}")

    await client.close()

asyncio.run(main())

Context Manager

async with AsyncClient(api_key=os.environ['EMAILVERIFY_API_KEY']) as client:
    result = await client.verify('user@example.com')

Bulkverificatie

Een Bulktaak Indienen

emails = [
    'user1@example.com',
    'user2@example.com',
    'user3@example.com',
]

job = client.verify_bulk(emails)
print(f"Taak ID: {job.id}")
print(f"Status: {job.status}")

Taakstatus Controleren

status = client.get_bulk_job_status(job.id)

print({
    'id': status.id,
    'status': status.status,      # 'pending', 'processing', 'completed', 'failed'
    'total': status.total,
    'processed': status.processed,
    'valid': status.valid,
    'invalid': status.invalid,
})

Resultaten Ophalen

results = client.get_bulk_job_results(job.id)

for result in results:
    print(f"{result.email}: {result.status}")

Met Webhook

job = client.verify_bulk(
    emails,
    webhook_url='https://your-domain.com/webhooks/emailverify',
)

Tegoedbeheer

credits = client.get_credits()

print({
    'available': credits.available,
    'used': credits.used,
    'total': credits.total,
})

Foutafhandeling

Exceptietypen

from emailverify import (
    Client,
    EmailVerifyError,
    AuthenticationError,
    RateLimitError,
    ValidationError,
)

try:
    result = client.verify('invalid-email')
except AuthenticationError:
    print('Ongeldige API-sleutel')
except RateLimitError as e:
    print(f'Rate beperkt. Probeer opnieuw na {e.retry_after} seconden')
except ValidationError as e:
    print(f'Ongeldige invoer: {e}')
except EmailVerifyError as e:
    print(f'API fout: {e}')

Herhalingsconfiguratie

client = Client(
    api_key=os.environ['EMAILVERIFY_API_KEY'],
    retries=5,
    retry_delay=1.0,           # Initiële vertraging in seconden
    retry_max_delay=30.0,      # Max vertraging tussen herhalingen
)

Framework Integratie

Django

# views.py
from django.http import JsonResponse
from django.views.decorators.http import require_POST
from emailverify import Client
import os

client = Client(api_key=os.environ['EMAILVERIFY_API_KEY'])

@require_POST
def verify_email(request):
    import json
    data = json.loads(request.body)
    email = data.get('email')

    try:
        result = client.verify(email)

        if result.status == 'invalid':
            return JsonResponse({
                'valid': False,
                'message': 'Voer een geldig e-mailadres in',
            }, status=400)

        if result.result.disposable:
            return JsonResponse({
                'valid': False,
                'message': 'Wegwerp e-mailadressen zijn niet toegestaan',
            }, status=400)

        return JsonResponse({'valid': True, 'score': result.score})
    except Exception as e:
        return JsonResponse({'error': str(e)}, status=500)

Django Formuliervalidatie

# forms.py
from django import forms
from emailverify import Client
import os

client = Client(api_key=os.environ['EMAILVERIFY_API_KEY'])

class RegistrationForm(forms.Form):
    email = forms.EmailField()

    def clean_email(self):
        email = self.cleaned_data['email']
        result = client.verify(email)

        if result.status == 'invalid':
            raise forms.ValidationError('Voer een geldig e-mailadres in')

        if result.result.disposable:
            raise forms.ValidationError('Wegwerp e-mailadressen zijn niet toegestaan')

        return email

Flask

from flask import Flask, request, jsonify
from emailverify import Client
import os

app = Flask(__name__)
client = Client(api_key=os.environ['EMAILVERIFY_API_KEY'])

@app.route('/verify', methods=['POST'])
def verify_email():
    email = request.json.get('email')

    try:
        result = client.verify(email)
        return jsonify({
            'email': result.email,
            'status': result.status,
            'score': result.score,
        })
    except Exception as e:
        return jsonify({'error': str(e)}), 500

FastAPI

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from emailverify import AsyncClient
import os

app = FastAPI()
client = AsyncClient(api_key=os.environ['EMAILVERIFY_API_KEY'])

class EmailRequest(BaseModel):
    email: str

@app.post('/verify')
async def verify_email(request: EmailRequest):
    try:
        result = await client.verify(request.email)
        return {
            'email': result.email,
            'status': result.status,
            'score': result.score,
            'deliverable': result.result.deliverable,
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.on_event('shutdown')
async def shutdown():
    await client.close()

Complete Voorbeelden

Gebruikersregistratie Validatie

from emailverify import Client
import os

client = Client(api_key=os.environ['EMAILVERIFY_API_KEY'])

def validate_registration_email(email: str) -> dict:
    """Valideer e-mail voor gebruikersregistratie."""
    result = client.verify(email)

    # Weiger ongeldige e-mails
    if result.status == 'invalid':
        return {
            'valid': False,
            'reason': 'invalid_email',
            'message': 'Dit e-mailadres is ongeldig',
        }

    # Weiger wegwerp e-mails
    if result.result.disposable:
        return {
            'valid': False,
            'reason': 'disposable',
            'message': 'Gebruik alstublieft een permanent e-mailadres',
        }

    # Waarschuw voor rol-gebaseerde e-mails
    if result.result.role:
        return {
            'valid': True,
            'warning': 'role_based',
            'message': 'Het gebruik van een persoonlijk e-mailadres wordt aanbevolen',
        }

    return {
        'valid': True,
        'score': result.score,
    }

# Gebruik
validation = validate_registration_email('user@example.com')
if not validation['valid']:
    print(validation['message'])

Bulk Lijstopschoning

import csv
from emailverify import Client
import os

client = Client(api_key=os.environ['EMAILVERIFY_API_KEY'])

def clean_email_list(input_file: str, output_file: str):
    """E-maillijst opschonen en resultaten exporteren."""

    # Lees e-mails uit CSV
    with open(input_file, 'r') as f:
        reader = csv.DictReader(f)
        emails = [row['email'] for row in reader]

    # Bulkverificatie indienen
    job = client.verify_bulk(emails)
    print(f"Taak {job.id} ingediend met {len(emails)} e-mails")

    # Wacht op voltooiing (polling)
    import time
    while True:
        status = client.get_bulk_job_status(job.id)
        print(f"Voortgang: {status.processed}/{status.total}")

        if status.status == 'completed':
            break
        elif status.status == 'failed':
            raise Exception(f"Taak mislukt: {status.error}")

        time.sleep(5)

    # Resultaten ophalen en naar output schrijven
    results = client.get_bulk_job_results(job.id)

    with open(output_file, 'w', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=['email', 'status', 'score', 'disposable'])
        writer.writeheader()

        for result in results:
            writer.writerow({
                'email': result.email,
                'status': result.status,
                'score': result.score,
                'disposable': result.result.disposable,
            })

    print(f"Resultaten geschreven naar {output_file}")
    print(f"Geldig: {status.valid}, Ongeldig: {status.invalid}")

# Gebruik
clean_email_list('contacts.csv', 'cleaned_contacts.csv')

Async Gelijktijdige Verificatie

import asyncio
from emailverify import AsyncClient
import os

async def verify_emails_concurrent(emails: list[str], concurrency: int = 10):
    """Verifieer meerdere e-mails met gecontroleerde gelijktijdigheid."""

    client = AsyncClient(api_key=os.environ['EMAILVERIFY_API_KEY'])
    semaphore = asyncio.Semaphore(concurrency)

    async def verify_with_semaphore(email):
        async with semaphore:
            return await client.verify(email)

    tasks = [verify_with_semaphore(email) for email in emails]
    results = await asyncio.gather(*tasks, return_exceptions=True)

    await client.close()

    # Resultaten verwerken
    valid = []
    invalid = []
    errors = []

    for email, result in zip(emails, results):
        if isinstance(result, Exception):
            errors.append((email, str(result)))
        elif result.status == 'valid':
            valid.append(email)
        else:
            invalid.append(email)

    return {
        'valid': valid,
        'invalid': invalid,
        'errors': errors,
    }

# Gebruik
emails = ['user1@example.com', 'user2@example.com', 'user3@example.com']
results = asyncio.run(verify_emails_concurrent(emails))
print(f"Geldig: {len(results['valid'])}, Ongeldig: {len(results['invalid'])}")

Type Hints

De SDK bevat volledige type hints voor IDE ondersteuning:

from emailverify import Client, VerificationResult, BulkJob
from typing import Optional

def process_verification(result: VerificationResult) -> Optional[str]:
    if result.status == 'valid':
        return result.email
    return None

Volgende Stappen

On this page