
Bibliothèque Python d'analyse d'adresses e-mail et de 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 est une bibliothèque d'analyse open source écrite en Python par l'équipe Mailgun.
Flanker se compose actuellement d'une bibliothèque d'analyse d'adresses (flanker.addresslib) ainsi
que d'une bibliothèque d'analyse MIME (flanker.mime).
Une documentation détaillée est fournie dans le Manuel d'utilisation <https://github.com/mailgun/flanker/blob/master/docs/User%20Manual.md>_ ainsi que dans la
Référence de l'API <https://github.com/mailgun/flanker/blob/master/docs/API%20Reference.md>_. Un guide de démarrage rapide est fourni ci-dessous.
Flanker est largement utilisé par Mailgun <www.mailgun.com>_ en production avec
Python 2.7. La version de production actuelle est v0.8.5.
Le support de Python 3 a été ajouté dans la v0.9.0 à la demande de la communauté. Nous n'utilisons pas Flanker avec Python 3 en interne. Tout ce que nous savons, c'est que les tests passent avec Python 3.6, donc utilisez-le à vos risques et périls. N'hésitez pas à signaler les problèmes spécifiques à Python 3 si vous en voyez.
Vous pouvez installer flanker via pip ou cloner le dépôt depuis GitHub.
Vous aurez besoin des fichiers d'en-tête Python avant de commencer à travailler avec flanker, alors installez-les d'abord :
.. code-block:: bash
sudo apt-get install python-dev
sudo yum install python-devel
Si vous utilisez pip, tapez simplement :
.. code-block:: bash
pip install flanker
Si vous clonez depuis GitHub, vous pouvez taper :
.. code-block:: bash
git clone [email protected]:mailgun/flanker.git cd flanker pip install -e .
Pour analyser une boîte aux lettres unique (nom d'affichage ainsi qu'adresse e-mail) :
.. code-block:: py
from flanker.addresslib import address
address.parse('Foo [email protected]') Foo [email protected]
Une adresse invalide est renvoyée sous la forme None :
.. code-block:: py
from flanker.addresslib import address
print address.parse('@example.com') None
Pour analyser une adresse e-mail unique (sans nom d'affichage) :
.. code-block:: py
from flanker.addresslib import address
address.parse('[email protected]', addr_spec_only=True) [email protected]
Pour analyser une liste d'adresses :
.. code-block:: py
from flanker.addresslib import address
address.parse_list(['[email protected], [email protected], @example.com']) [[email protected], [email protected]]
Pour analyser une liste d'adresses et renvoyer également un tuple contenant les adresses analysées et les parties non analysables
.. 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']
Pour analyser une liste d'adresses en mode strict :
.. code-block:: py
from flanker.addresslib import address
address.parse_list(['[email protected], [email protected], @example.com'], strict=True) [[email protected], [email protected]]
Pour valider une adresse e-mail (analyse ainsi que vérifications DNS, existence MX et grammaire ESP) :
.. code-block:: py
from flanker.addresslib import address
address.validate_address('[email protected]') [email protected]
Pour valider une liste d'adresses :
.. 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'])
Pour les exemples suivants, message_string sera défini sur le message MIME suivant :
::
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--
Pour analyser un message MIME :
.. code-block:: py
from flanker import mime
msg = mime.from_string(message_string)
En-têtes de message MIME (dictionnaire unicode à valeurs multiples avec en-têtes) :
.. 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')]
Membre content_type utile avec des prédicats :
.. 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
Corps décodé d'un message :
.. 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