Product
Acabamos de lanzar en código abierto Flanker, nuestra biblioteca de Python para analizar direcciones de email y MIME
En junio lanzamos nuestro servicio de validación de direcciones Guardpost. Desde entonces, muchos clientes de Mailgun han utilizado Guardpost para validar sus direcciones de email y reducir los registros falsos y las tasas de rebote. En junio prometimos que lanzaríamos en código abierto nuestra biblioteca para analizar direcciones y MIME escrita en Python, y eso es lo que hacemos hoy. Sigue leyendo para conocer los detalles o, si quieres ir directamente al grano, aquí tienes el repositorio en Github, que incluye un Guía de inicio rápido, Manual de usuario y Guía de la API. También puedes instalar Flanker a través de pip.
Presentamos Flanker
Flanker consta de dos partes:
- mime: esta es nuestra biblioteca para analizar MIME. ¿Por qué es una gran noticia? Nuestra biblioteca para analizar MIME puede ser hasta 20 veces más rápida según tu conjunto de datos.
- addresslib: esta es la biblioteca de análisis de direcciones que constituye el núcleo central de Guardpost . Puedes usarla para analizar direcciones o listas de direcciones basadas de forma estricta en la gramática RFC, o para validar direcciones o listas basadas en comprobaciones adicionales. Las comprobaciones adicionales incluyen búsquedas de DNS, existencia de registros MX, gramática específica del proveedor de servicios de envío de emails (ESP) y corrección ortográfica.
Más sobre mime
Mailgun analiza una gran cantidad de MIME, por lo que requiere un paquete de gestión de MIME rápido y eficiente. Cuando lanzamos Mailgun, usábamos la biblioteca de análisis estándar de Python, pero pronto nos dimos cuenta de que necesitábamos algo más predecible. Como la biblioteca estándar era bastante rápida con mensajes pequeños, pero mucho peor con los más grandes, decidimos crear Flanker. Donde Flanker destaca de verdad es al analizar los encabezados. Flanker no analiza todo el mensaje si solo te interesan los encabezados, lo que te ofrece un acceso rápido a ellos tanto si el mensaje MIME ocupa 1 KB o 10 MB. Según el mensaje MIME que se procese, flanker.mime puede ser hasta 20 veces más rápido que el paquete estándar para análisis MIME de Python, usar en torno a un 50 % menos de memoria y realizar hasta 730 veces menos llamadas a funciones. Puedes ver todas las pruebas de rendimiento que ejecutamos aquí.
¿Qué otras diferencias hay entre flanker.mime y email.parser?

Más sobre addresslib
El análisis en addresslib es una función muy potente, y puedes consultar la documentación para ver todo lo que te permite hacer. Otra función muy interesante de addresslib es la de validación. Esta es una parte muy importante de nuestro servicio de verificación de emails.
La validación incluye los pasos de análisis detallados en la documentación, además de lo siguiente:
Búsqueda de DNS
Tras analizar una dirección, el validador intenta hacer una búsqueda de DNS en el dominio. Primero comprueba si existen registros MX y, de no ser así, el validador recurrirá a los registros A. Si no existen registros MX ni A, la dirección se considera inválida. Por defecto, flanker usa la biblioteca dnsq (también escrita por Mailgun) para las búsquedas de DNS, aunque su uso no es obligatorio. Se puede usar cualquier biblioteca de búsquedas de DNS siempre que se ajuste a la misma interfaz que la de un diccionario de Python. Consulta flanker/addresslib/drivers/dns_lookup.py para ver un ejemplo.
Existencia de MX
Si la búsqueda de DNS del paso anterior devolvió un registro MX o A válido, se comprueba esa dirección para garantizar que un Mail Exchanger responda en el puerto 25. Si ningún Mail Exchanger responde, el dominio se considera inválido. Las comprobaciones de búsquedas de DNS y existencia de MX consumen muchos recursos, por lo que el resultado de los dos pasos anteriores puede guardarse en caché para mejorar el rendimiento. Por defecto, Flanker usa Redis para esta caché, pero su uso no es obligatorio. Al igual que con la biblioteca de búsquedas de DNS, aquí se puede usar cualquier caché siempre que la interfaz sea idéntica a la de un diccionario de Python. Consulta flanker/addresslib/drivers/redis_cache.py para ver un ejemplo.
Gramática personalizada
Los grandes ESP casi nunca son compatibles con la gramática completa que permite el RFC para las direcciones de email; de hecho, la mayoría tiene una gramática bastante restrictiva. Por ejemplo, Yahoo! Mail exige que la dirección de email tenga entre 4 y 32 caracteres y solo admite caracteres alfanuméricos, puntos (.) y guiones bajos (_). Si el mail exchanger del paso anterior coincide con el de un ESP, con una gramática conocida, el validador ejecutará esa comprobación adicional en la parte local de la dirección. Se puede agregar una gramática personalizada añadiendo un plugin para el ESP específico en el directorio flanker/addresslib/plugins. Consulta el Manual de usuario para obtener más información.
Sugerencia alternativa
Un paso independiente, aunque relacionado, es la corrección ortográfica en la parte del dominio de una dirección de email. Esto sirve para corregir errores tipográficos comunes como gmal.com en lugar de gmail.com. El corrector ortográfico usa difflib, que utiliza el algoritmo de Ratcliff-Obershelp para calcular la similitud entre dos cadenas. Se trata de un algoritmo muy rápido y preciso para la corrección ortográfica de dominios. Consulta nuestra artículo anterior sobre este tema.
Siguientes pasos
Puedes hacer un fork de Flanker y empezar a usarlo hoy mismo. Nos entusiasma enormemente que la comunidad lo use y contribuya al proyecto. Como Flanker es una parte integral de Mailgun, seguiremos manteniéndolo y mejorándolo de forma activa todo el tiempo que estemos aquí.
Áreas en las que puedes contribuir:
Queremos animar a nuevos profesionales del desarrollo a que contribuyan a Flanker y al software de código abierto en general. Aquí tienes dos elementos de nuestra hoja de ruta muy fáciles de abarcar para que cualquier profesional del desarrollo sin experiencia pueda empezar a contribuir:
- Más gramática específica de ESP. No podemos abarcar todos los ESP nosotros solos, así que, si sabes lo que admite tu ESP para las partes locales, contribuye con un plugin. Es una forma estupenda de empezar a aprender sobre gramática y análisis.
- Corrección automática de errores. Un par de ideas: si olvidas cerrar tu dirección de email con un corchete angular (<), el validador debería detectarlo y corregirlo por ti. Si olvidaste entrecomillar un carácter especial, como un paréntesis, en tu nombre visible, deberíamos entrecomillarlo por ti para garantizar que los clientes de email lo procesen de forma correcta.
¡Feliz envío!
El equipo de Mailgun