API de verificação de email em Python: sandbox e erros

Equipe editorial do 1-email.com · Revisado em 9 de outubro de 2026 · Política editorial

Use a biblioteca padrão do Python no servidor, trate resultados unknown e teste respostas 402/429.

Baixe e execute localmente

Python 3.10+. Não exige instalar pacotes. Baixe todos os arquivos abaixo na mesma pasta e execute:

python3 verify.py

Arquivos de código

verify.py Baixar

"""Python 3.10+: run on your server, never in a browser. No dependencies."""
import json
import os
import sys
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen


class VerificationError(Exception):
    def __init__(self, status, message, retry_after=None):
        super().__init__(message)
        self.status = status
        self.retry_after = retry_after


def verify_email(email, *, key=None, opener=urlopen):
    key = key or os.environ.get("EEV_API_KEY", "eev_sandbox_key")
    url = "https://api.easyemailverification.com/v1/verify?" + urlencode({"email": email})
    request = Request(url, headers={"X-API-Key": key, "Accept": "application/json"})
    try:
        with opener(request, timeout=30) as response:
            data = json.load(response)
    except HTTPError as error:
        messages = {402: "No credits: check your account before retrying.",
                    429: "Rate limited: wait before another request; respect Retry-After."}
        raise VerificationError(error.code, messages.get(error.code, "Verification request failed."),
                                error.headers.get("Retry-After") if error.headers else None) from error
    except (URLError, TimeoutError, ValueError) as error:
        raise VerificationError(503, "No reliable result; review the request before retrying.") from error
    if not isinstance(data, dict) or data.get("result") not in ("valid", "invalid", "unknown"):
        raise VerificationError(502, "Unexpected API response; do not classify the address.")
    return data


def classify(data):
    if data["result"] == "invalid":
        return "invalid"
    if data["result"] == "unknown":
        return "review"
    if data.get("disposable") or data.get("accept_all") or data.get("safe_to_send") is not True:
        return "review"
    return "passed_checks"


if __name__ == "__main__":
    email = sys.argv[1] if len(sys.argv) > 1 else "valid@sandbox.easyemailverification.com"
    try:
        data = verify_email(email)
        print(json.dumps({"decision": classify(data), "result": data["result"],
                          "reason": data.get("reason"), "did_you_mean": data.get("did_you_mean")}, indent=2))
    except VerificationError as error:
        print(f"HTTP {error.status}: {error}", file=sys.stderr)
        sys.exit(1)

Teste sucesso, incerteza e falhas

Troque o endereço padrão pelo argumento da linha de comando (Python/Node) ou pelo campo do formulário. Use valid, invalid, unknown, catchall, disposable, quota e ratelimit em sandbox.easyemailverification.com. O caso especial typo@gmial.com fornece uma sugestão de correção.

Espere revisão para unknown e sinais de risco. Falta de créditos deve interromper a chamada com 402; limite de chamadas retorna 429. Falhas de rede ou JSON nunca devem gerar classificação valid ou invalid de uma caixa postal.

Antes de ir para produção

Defina EEV_API_KEY no ambiente do servidor. Mantenha o endpoint fixo, use timeout, limite o tamanho da chamada e adicione controles de abuso. Para cadastro real, adicione proteção de origem/CSRF, limites próprios e gestão de consentimento. Não repita uma chamada incerta automaticamente nem troque um endereço com erro silenciosamente.

Fonte primária: Easy API reference. Baixar instruções dos exemplos.

Pronto para endereços reais?

Nós operamos o Easy Email Verification. Crie uma conta gratuita para obter a chave de produção após testar a integração.

Obter uma chave de produção gratuita