
Librería Python de análisis de direcciones de correo electrónico y MIME
.. image:: https://travis-ci.org/mailgun/flanker.svg?branch=master :target: https://travis-ci.org/mailgun/flanker
.. image:: https://coveralls.io/repos/github/mailgun/flanker/badge.svg?branch=master :target: https://coveralls.io/github/mailgun/flanker?branch=master
Flanker es una librería de análisis (parsing) de código abierto escrita en Python por el equipo de Mailgun.
Flanker actualmente consta de una librería de análisis de direcciones (flanker.addresslib) así como
de una librería de análisis MIME (flanker.mime).
La documentación detallada se proporciona en el Manual de Usuario <https://github.com/mailgun/flanker/blob/master/docs/User%20Manual.md>_ así como en la
Referencia de API <https://github.com/mailgun/flanker/blob/master/docs/API%20Reference.md>_. A continuación se incluye una Guía de Inicio Rápido.
Flanker es utilizado ampliamente por Mailgun <www.mailgun.com>_ en producción con
Python 2.7. La versión de producción actual es v0.8.5.
El soporte para Python 3 se añadió en v0.9.0 por petición popular de la comunidad. No utilizamos Flanker con Python 3 internamente. Todo lo que sabemos es que las pruebas pasan con Python 3.6, así que úsalo bajo tu propio riesgo. No dudes en informar de problemas específicos de Python 3 si ves alguno.
Puedes instalar flanker mediante pip o clonar el repositorio desde GitHub.
Necesitarás los archivos de cabecera de Python antes de empezar a trabajar con flanker, así que instálalos primero:
.. code-block:: bash
sudo apt-get install python-dev
sudo yum install python-devel
Si estás usando pip, simplemente escribe:
.. code-block:: bash
pip install flanker
Si clonas desde GitHub, puedes escribir:
.. code-block:: bash
git clone [email protected]:mailgun/flanker.git cd flanker pip install -e .
Para analizar un único buzón (nombre para mostrar así como dirección de correo electrónico):
.. code-block:: py
from flanker.addresslib import address
address.parse('Foo [email protected]') Foo [email protected]
Una dirección no válida se devuelve como None:
.. code-block:: py
from flanker.addresslib import address
print address.parse('@example.com') None
Para analizar una única dirección de correo electrónico (sin nombre para mostrar):
.. code-block:: py
from flanker.addresslib import address
address.parse('[email protected]', addr_spec_only=True) [email protected]
Para analizar una lista de direcciones:
.. code-block:: py
from flanker.addresslib import address
address.parse_list(['[email protected], [email protected], @example.com']) [[email protected], [email protected]]
Para analizar una lista de direcciones y además devolver una tupla que contenga las direcciones analizadas y las partes no analizables
.. code-block:: py
from flanker.addresslib import address
address.parse_list(['[email protected], [email protected], @example.com'], as_tuple=True) [[email protected], [email protected]], ['@example.com']
Para analizar una lista de direcciones en modo estricto:
.. code-block:: py
from flanker.addresslib import address
address.parse_list(['[email protected], [email protected], @example.com'], strict=True) [[email protected], [email protected]]
Para validar una dirección de correo electrónico (análisis además de comprobaciones de DNS, existencia de MX y gramática del ESP):
.. code-block:: py
from flanker.addresslib import address
address.validate_address('[email protected]') [email protected]
Para validar una lista de direcciones:
.. code-block:: py
from flanker.addresslib import address
address.validate_list(['[email protected], [email protected], @mailgun.com'], as_tuple=True) ([[email protected], [email protected]], ['@mailgun.com'])
Para los siguientes ejemplos, message_string se establecerá en el siguiente mensaje MIME:
::
MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=001a11c1d71697c7f004e6856996 From: Bob [email protected] To: Alice [email protected] Subject: hello, world Date: Mon, 16 Sep 2013 12:43:03 -0700
--001a11c1d71697c7f004e6856996 Content-Type: text/plain; charset=us-ascii
Hello, Alice
--001a11c1d71697c7f004e6856996 Content-Type: text/html; charset=us-ascii
Hello, Alice
--001a11c1d71697c7f004e6856996--
Para analizar un mensaje MIME:
.. code-block:: py
from flanker import mime
msg = mime.from_string(message_string)
Cabeceras del mensaje MIME (diccionario unicode de valores múltiples con cabeceras):
.. code-block:: py
from flanker import mime
msg = mime.from_string(message_string) msg.headers.items() [('Mime-Version', '1.0'), ('Content-Type', ('multipart/alternative', {'boundary': u'001a11c1d71697c7f004e6856996'})), ('From', 'Bob [email protected]'), ('To', 'Alice [email protected]'), ('Subject', 'hello, world'), ('Date', 'Mon, 16 Sep 2013 12:43:03 -0700')]
Miembro content_type útil con predicados:
.. code-block:: py
from flanker import mime msg = mime.from_string(message_string)
msg.content_type.is_multipart() True
msg.content_type.is_singlepart() False
msg.content_type.is_message_container() False
Cuerpo decodificado de un mensaje:
.. code-block:: py
from flanker import mime msg = mime.from_string(message_string)
None because message is multipart
print msg.body None
for part in msg.parts: print 'Content-Type: {} Body: {}'.format(part, part.body)
Content-Type: (text/plain) Body: Hello, Alice Content-Type: (text/html) Body:
Hello, Alice
None because no enclosed messages exist
print msg.enclosed None