
مكتبة بايثون لتحليل عناوين البريد الإلكتروني و 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 هي مكتبة تحليل مفتوحة المصدر مكتوبة بلغة 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>_. فيما يلي دليل البدء السريع.
يتم استخدام 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.
ستحتاج إلى ملفات رؤوس Python قبل البدء في العمل مع flanker، لذا قم بتثبيتها أولاً:
.. code-block:: bash
sudo apt-get install python-dev
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 .
لتحليل صندوق بريد واحد (اسم العرض وكذلك عنوان البريد الإلكتروني):
.. 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
لتحليل عنوان بريد إلكتروني واحد (بدون اسم عرض):
.. 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]]
لتحليل قائمة عناوين وكذلك إرجاع صف (tuple) يحتوي على العناوين التي تم تحليلها والأجزاء غير القابلة للتحليل
.. 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]]
للتحقق من صحة عنوان بريد إلكتروني (التحليل بالإضافة إلى فحوصات 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'])
في الأمثلة التالية، سيتم تعيين 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