邮箱解析工具
flanker的Python项目详细描述
silver是一个由mailgun团队用python编写的开源解析库。 侧翼程序目前包含一个地址解析库(silver.addresslib)作为 以及一个mime解析库(silver.mime)。
详细的文档在User Manual以及 API Reference。下面提供了快速入门指南。
python版本
侧翼机在生产中被Mailgun大量使用 Python2.7。当前的生产版本是v0.8.5。
在v0.9.0中,社区的流行需求增加了对python 3的支持。 我们没有在房子里用python 3的侧翼。我们只知道那些测试 使用Python3.6,因此请自行承担风险。请随意报告python 3 如果你看到具体的问题。
安装
您可以通过pip安装侧翼程序,或者从github克隆repo。
在开始使用侧翼程序之前,您需要python头文件,因此请先安装它们:
# ubuntu sudo apt-get install python-dev # fedora sudo yum install python-devel
如果您使用的是pip,只需键入:
pip install flanker
如果要从github克隆,可以键入:
git clone git@github.com:mailgun/flanker.git
cd flanker
pip install -e .
地址解析
解析单个邮箱(显示名称和电子邮件地址):
>>>fromflanker.addresslibimportaddress>>>>>>address.parse('Foo foo@example.com')Foo<foo@example.com>
无效地址返回为none:
>>>fromflanker.addresslibimportaddress>>>>>>printaddress.parse('@example.com')None
解析单个电子邮件地址(无显示名称):
>>>fromflanker.addresslibimportaddress>>>>>>address.parse('foo@example.com',addr_spec_only=True)foo@example.com
解析地址列表:
>>>fromflanker.addresslibimportaddress>>>>>>address.parse_list('foo@example.com, bar@example.com, @example.com')[foo@example.com,bar@example.com]
解析地址列表并返回包含 地址和不可分解的部分
>>>fromflanker.addresslibimportaddress>>>>>>address.parse_list('foo@example.com, bar@example.com, @example.com',as_tuple=True)[foo@example.com,bar@example.com],['@example.com']
要在严格模式下分析地址列表:
>>>fromflanker.addresslibimportaddress>>>>>>address.parse_list('foo@example.com, bar@example.com, @example.com',strict=True)[foo@example.com,bar@example.com]
验证电子邮件地址(解析以及DNS、MX存在和ESP语法检查):
>>>fromflanker.addresslibimportaddress>>>>>>address.validate_address('foo@mailgun.com')foo@mailgun.com
要验证地址列表:
>>>fromflanker.addresslibimportaddress>>>>>>address.validate_list('foo@mailgun.com, bar@mailgun.com, @mailgun.com',as_tuple=True)([foo@mailgun.com,bar@mailgun.com],['@mailgun.com'])
mime解析
对于以下示例,消息字符串将设置为以下mime消息:
MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=001a11c1d71697c7f004e6856996 From: Bob <bob@example.com> To: Alice <alice@example.com> 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 <p>Hello, <b>Alice</b></p> --001a11c1d71697c7f004e6856996--
要分析mime消息:
>>>fromflankerimportmime>>>>>>msg=mime.from_string(message_string)
mime消息头(带头的unicode多值字典):
>>>fromflankerimportmime>>>>>>msg=mime.from_string(message_string)>>>msg.headers.items()[('Mime-Version','1.0'),('Content-Type',('multipart/alternative',{'boundary':u'001a11c1d71697c7f004e6856996'})),('From','Bob <bob@example.com>'),('To','Alice <alice@example.com>'),('Subject','hello, world'),('Date','Mon, 16 Sep 2013 12:43:03 -0700')]
具有谓词的有用内容类型成员:
>>>fromflankerimportmime>>>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
已解码的消息正文:
>>>fromflankerimportmime>>>msg=mime.from_string(message_string)>>>>>># None because message is multipart>>>printmsg.bodyNone>>>>>>forpartinmsg.parts:print'Content-Type: {} Body: {}'.format(part,part.body)Content-Type:(text/plain)Body:Hello,*Alice*Content-Type:(text/html)Body:<p>Hello,<b>Alice</b></p>>>># None because no enclosed messages exist>>>printmsg.enclosedNone