Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
flanker — Библиотека Python для разбора email-адресов и MIME | Kitploit
Инструменты/GitHubGitHub/mailgun/flanker
Утилиты общего назначенияСкриптинг и автоматизацияУтилиты и фреймворки
GitHubmailgun/flanker

flanker

Библиотека Python для разбора email-адресов и MIME

РепозиторийСайт
1.6k2144 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Flanker — разбор email-адресов и MIME для Python

.. 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 — это библиотека синтаксического анализа с открытым исходным кодом, написанная на Python командой Mailgun. В настоящее время Flanker состоит из библиотеки разбора адресов (flanker.addresslib), а также библиотеки разбора MIME (flanker.mime).

Подробная документация приведена в Руководстве пользователя <https://github.com/mailgun/flanker/blob/master/docs/User%20Manual.md>, а также в Справочнике по API <https://github.com/mailgun/flanker/blob/master/docs/API%20Reference.md>. Ниже представлено краткое руководство.

Версии Python

Flanker активно используется в продакшене Mailgun <www.mailgun.com>_ на Python 2.7. Текущая продакшен-версия — v0.8.5.

Поддержка Python 3 была добавлена в v0.9.0 по многочисленным просьбам сообщества. Мы не используем Flanker с Python 3 внутри компании. Всё, что нам известно, — это то, что тесты проходят на Python 3.6, так что используйте на свой страх и риск. Если заметите какие-либо проблемы, связанные с Python 3, сообщайте о них.

Установка

Вы можете установить flanker через pip или склонировать репозиторий с GitHub.

Перед началом работы с flanker вам понадобятся заголовочные файлы Python, поэтому сначала установите их:

.. code-block:: bash

ubuntu

sudo apt-get install python-dev

fedora

sudo yum install python-devel

Если вы используете pip, просто введите:

.. code-block:: bash

pip install flanker

Если вы клонируете с GitHub, вы можете ввести:

.. code-block:: bash

git clone [email protected]:mailgun/flanker.git cd flanker pip install -e .

Разбор адресов

Чтобы разобрать отдельный почтовый ящик (отображаемое имя, а также email-адрес):

.. code-block:: py

from flanker.addresslib import address

address.parse('Foo [email protected]') Foo [email protected]

Недопустимый адрес возвращается как None:

.. code-block:: py

from flanker.addresslib import address

print address.parse('@example.com') None

Чтобы разобрать отдельный email-адрес (без отображаемого имени):

.. code-block:: py

from flanker.addresslib import address

address.parse('[email protected]', addr_spec_only=True) [email protected]

Чтобы разобрать список адресов:

.. code-block:: py

from flanker.addresslib import address

address.parse_list(['[email protected], [email protected], @example.com']) [[email protected], [email protected]]

Чтобы разобрать список адресов, а также получить кортеж с разобранными адресами и не поддающимися разбору частями

.. 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']

Чтобы разобрать список адресов в строгом режиме:

.. code-block:: py

from flanker.addresslib import address

address.parse_list(['[email protected], [email protected], @example.com'], strict=True) [[email protected], [email protected]]

Чтобы проверить email-адрес (разбор, а также проверки DNS, наличия MX и грамматики ESP):

.. code-block:: py

from flanker.addresslib import address

address.validate_address('[email protected]') [email protected]

Чтобы проверить список адресов:

.. 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'])

Разбор MIME

В следующих примерах message_string будет содержать следующее 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--

Чтобы разобрать MIME-сообщение:

.. code-block:: py

from flanker import mime

msg = mime.from_string(message_string)

Заголовки MIME-сообщения (unicode-словарь с несколькими значениями для заголовков):

.. 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')]

Полезный атрибут content_type с предикатами:

.. 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

Декодированное тело сообщения:

.. 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

Скачать инструмент