JoshData / JoshData/python-email-validator

Proposal: Add an async email validation function using dnspython’s async resolver

Abierto
#164 5 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Python
Estrellas
1.4k
Forks
140
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

I maintain a high-volume lead-gen API that validates thousands of emails per request. To keep latency low, we can’t rely on the library’s check_deliverability=True option because it triggers blocking DNS lookups. Instead, we run the library with deliverability checks disabled and perform our own async DNS queries via dns.asyncresolver.

It would be a real improvement if the library exposed a first-class async deliverability path. Below is a minimal prototype showing what that could look like:

from email_validator import validate_email, EmailNotValidError, ValidatedEmail
import dns.asyncresolver

dns_resolver = dns.asyncresolver.Resolver()

async def _resolve_mail_hosts(domain: str):
    try: return await dns_resolver.resolve(domain, "MX")
    except Exception:
        for record_type in ("A", "AAAA"):
            try: return await dns_resolver.resolve(domain, record_type)
            except Exception: continue
        return None

async def aio_validate_email(email: str) -> ValidatedEmail:
    email_info = validate_email(email, check_deliverability=False)
    if await _resolve_mail_hosts(email_info.domain) is None: raise EmailNotValidError
    return email_info

My plan is to open a PR that adds an async validator fully compatible with your existing Pydantic models, plus tests and documentation. Before I invest the time, are you open to adding async support to the project?

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza revisando validate_email, ValidatedEmail, EmailNotValidError, los modelos de Pydantic existentes y el flujo propuesto de dns.asyncresolver. El trabajo estará completo cuando el proyecto tenga un validador asíncrono de entregabilidad de primera clase compatible con esos modelos, junto con las pruebas y la documentación previstas.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
backend, networking
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
30/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.