Flanker:Mailgun 出品的 Python 邮件解析库
Flanker 在 GitHub 上有 1,650 个 Star。
这是 Mailgun 团队开源的 Python 解析库,只做两件事:解析邮箱地址、解析 MIME 消息。代码在生产环境跑了多年,处理过大量真实邮件。

1、 这玩意儿是干嘛的
邮件系统里有两个头疼的问题。一是地址格式花样多,带显示名称的、不带名称的、成批的,格式写错就直接退信。二是 MIME 消息结构复杂,多部分正文、附件、编码混在一起,手撕容易漏内容。
Flanker 把这两件事做成了一个库。flanker.addresslib 管地址解析和验证,flanker.mime 管 MIME 消息拆解。Mailgun 内部的主力版本是 v0.8.5,跑在 Python 2.7 上。

2、 地址解析
解析单个邮箱,自动识别显示名称和地址:
from flanker.addresslib import address
address.parse('Foo foo@example.com')
# Foo <foo@example.com>
只抽地址部分,不要显示名称:
address.parse('foo@example.com', addr_spec_only=True)
# foo@example.com
解析地址列表时,无效地址会被过滤掉:
address.parse_list(['foo@example.com, bar@example.com, @example.com'])
# [foo@example.com, bar@example.com]
想同时拿到有效地址和无效部分,加个参数:
address.parse_list([...], as_tuple=True)
# ([有效地址列表], [无效部分列表])
验证地址不只是看格式,还会查 DNS、MX 记录和 ESP 语法:
address.validate_address('foo@mailgun.com')
# foo@mailgun.com
3、 MIME 解析
把原始邮件字符串转成结构化对象,头部、正文、附件都能单独取出来。
from flanker import mime
msg = mime.from_string(message_string)
提取头部,返回的是多值字典:
msg.headers.items()
# [('Mime-Version', '1.0'), ('From', 'Bob <bob@example.com>'), ...]
判断消息类型:
msg.content_type.is_multipart() # True
msg.content_type.is_singlepart() # False
msg.content_type.is_message_container() # False
遍历多部分消息的每个片段:
for part in msg.parts:
print part.content_type, part.body
# Content-Type: (text/plain) Body: Hello, *Alice*
# Content-Type: (text/html) Body: <p>Hello, <b>Alice</b></p>
4、 安装
需要先装 Python 头文件,再用 pip:
# Ubuntu
sudo apt-get install python-dev
pip install flanker
或者从源码装:
git clone git@github.com:mailgun/flanker.git
cd flanker
pip install -e .
Python 3 的支持在 v0.9.0 加入,社区要求的。测试在 Python 3.6 上能通过,但 Mailgun 自己没在 Python 3 的生产环境跑过,出问题可以提 issue。
5、 适合谁用
- 做邮件收发系统的 Python 后端,需要可靠地解析发件人、收件人地址
- 批量验证邮箱有效性,需要做 DNS 和 MX 检查的场景
- 需要解析 MIME 结构、提取正文和附件的邮件处理工具
5、 适合谁用
- 做邮件收发系统的 Python 后端,需要可靠地解析发件人、收件人地址
- 批量验证邮箱有效性,需要做 DNS 和 MX 检查的场景
- 需要解析 MIME 结构、提取正文和附件的邮件处理工具
1712



被折叠的 条评论
为什么被折叠?



