邮箱解析工具

flanker的Python项目详细描述


https://travis-ci.org/mailgun/flanker.svg?branch=masterhttps://coveralls.io/repos/github/mailgun/flanker/badge.svg?branch=master

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java:数组大小的插入排序问题   javahibernate抛出com。mysql。jdbc。例外情况。jdbc4。MySQLSyntaxErrorException:查看手册,了解在“localTime”时间附近使用的正确语法   java Hibernate:org。冬眠UnUniqueObjectException:具有相同标识符值的不同对象已与会话关联   Gson无法用java解析我的json日期   JavaMaven使用JDK7为JVM5编译   java(播放2.1.3)@选择返回(字符串,字符串)对   java将画布拉伸到JFrame大小   来自JTextPane的java计算输入   java如何在使用Jenkins构建不稳定的情况下回滚Tomcat?   java是否可以获取包含类(CDI)的引用?   java“IllegalArgumentException:UNMAPPABLE[1]”,同时压缩带有希腊字符的文件   使用jtwitter和SignpostClient的java永久twitter oauth   java我需要对invokeAll调用的结果进行同步吗?   java Hibernate与jointable的关系   java Selenium断言搜索结果总计与正文中的实际结果   Java接口中的JLS8类只能位于最上面的类中   如果保证在收集时调用finalize(),java年轻一代仍然可以获得速度优势?   java集成OAuth帐户和本地帐户   java如何使用Jackson在对象中包含原始JSON?