所以,你的老板刚刚让你解决困扰公司的“电子邮件难题”:每个早晨,大量自动化邮件需要人工录入数据,严重拖慢了团队效率并堵塞邮箱。
你聪明又高效,很快想到创建电子邮件解析器来自动处理这些邮件数据。从想法到落地,这个过程比写几段脚本要复杂得多。下面将告诉你六步搞定电子邮件解析器,实现自动化邮件数据录入。
在开始之前:什么是解析及其含义
在计算机科学中,解析指的是按照一组规则将文本分割为多个有意义的部分。
创建电子邮件解析器,就是用工具让计算机自动读取邮件,并根据特定规则对它执行操作。理想情况下,解析器能从电子邮件中自动提取想要的信息,并无缝传送至你的业务系统。详见我们关于电子邮件解析详细介绍的文章。
小小推荐:你了解 Parseur 吗?
自己开发一个电子邮件解析器可以加深你对底层原理的认识,也的确是个很有趣的项目。
但要做成一个稳定实用的系统,耗时、难度和维护成本都不低。
Parseur 从2015年底开始完全从零开发,仅后端就投入了大约5000个小时,跨度长达六年,前端(用户界面和模板编辑器)也同样工作量巨大。Parseur 团队拥有20年以上编程经验的资深开发者。
到今天为止,我们还没有“开发完”,距离打造一个足够完善的文本解析器还有很大空间。
所以如果你想快速见效,建议直接试用 Parseur。Parseur 是一款易用且托管型的电子邮件解析器,可以节省你大量时间,免去自建方案的繁琐。你可以看看Parseur 的功能列表。
1. 获取电子邮件
目前,这些邮件一般分别进入各个员工邮箱、共享邮箱或团队邮箱。
首先需要做的是设立一个专用邮箱来集中收取所有待处理邮件。或者——如果你有相关经验,可以自建一台邮局服务器(即 SMTP 服务器)。
如果你熟悉这块领域,以下是几种常用 SMTP 服务器:
- Exim 是最流行的免费开源邮件传输代理(也叫邮件服务器),市场占有率领先 Postfix。
- Postfix 也是免费开源,以其“开箱即用”的良好口碑著称。根据邮件服务器市场份额调查,Exim 和 Postfix 共占全球邮件服务器80%份额。
- 微软阵营则是 Exchange。邮件可通过 EWS 直接获取,无需 POP3 或 IMAP。你也可以付费使用微软的 Exchange Online 托管服务。
- 全自建方案虽然颇具挑战,但其过程能让你得到深度实践。例如,Python 标准库内置了 smtpd模块作为启动点。
需要注意的是,大规模邮件投递、避免黑名单等难题建议交给专业团队处理。
另外,现在自己搭建邮件服务器已非常少见。云和 SaaS 时代,托管邮件服务更加省心省力。主流服务有:
- Postmark 注重可靠性和到达率,并且有免费套餐。
- Mandrill 作为早期市场参与者,主打营销与事务邮件。
- Sendgrid 定位于市场营销和事务型邮件。
- Mailgun 特别面向开发者,API 生态丰富,也提供免费方案。
我们在 Parseur 特别喜欢 Postmark,他们有良好的 API、优质的文档、官方支持多种主流开发语言的 SDK。
2. 将电子邮件转为可用数据格式
电子邮件是一种历史悠久的格式,甚至比《星球大战》还“古老”,积累了许多“顽疾”。比如,最初标准并未支持非美字符,如想支持 € 等特殊字符,需要实现多份 RFC 标准:
类似 Postmark、Mailgun 这样的邮件服务,能帮你解决诸多格式与编码兼容性问题。你无需亲自面对 UTF-8、MIME、cp1252 等复杂编码(如果你还没被这些名词困扰,真令人羡慕)。
以 Mailgun 为例,他们的服务器会接收邮件,并将其转换为易于处理的 JSON 文档,自动完成所有 RFC 层面的复杂处理。然后通过 webhook,向你指定的 URL 发送 HTTP POST 请求。
感兴趣的话,请参考全套 SMTP 相关 RFC 列表。
Mailgun 收到一封普通邮件时向你的服务器发送的数据类似于:
{
"subject": "My favorite café",
"sender": "John Doe <[email protected]>",
"recipient": "Mr. Parseur <[email protected]>",
"message": "It's called Awesome Café! See directions in the attachment. Bye.",
"attachements": [
{ "name": "directions.pdf", "content": "https://url.with.content" },
{ "name": "cappucino.jpg", "content": "https://another.content.url" }
]
/*... other interesting pieces of data here (read the doc, Luke) ...*/
}
是不是很清晰?对比标准邮件格式就能感受到差异:
MIME-Version: 1.0
Received: by 102.29.23.176 with HTTP; Sat, 12 Aug 2016 14:13:31 -0700 (PDT)
Date: Sat, 12 Aug 2016 14:13:31 -0700
Delivered-To: =?ISO-8859-1?Q?Mr. Parseur <[email protected]>
Message-ID: <CAAJL_=kPAJZ=fryb21wBOALp8-XOEL-h9j84s3SjpXYQjN3Z3A@mail.gmail.com>
Subject: =?ISO-8859-1?Q?My=20Favorite=20Caf=E9
From: =?ISO-8859-1?Q?John Doe <[email protected]>
To: =?ISO-8859-1?Q?Mr. Parseur <[email protected]>
Content-Type: multipart/mixed; boundary=mixed
==mixed
Content-Type: multipart/alternative; boundary=alternative
==alternative
Content-Type: text/plain; charset="utf-8"
It's called Awesome Caf=C3=A9! See directions in the attachm= ent. Bye.
==alternative
Content-Type: text/html; charset="utf-8"
It's called <b>Awesome Caf=C3=A9</b>! See directions in the = attachment. Bye. ==alternative== ==mixed
Content-Type: document/pdf; name="directions.pdf"
Content-Disposition: attachment; filename="directions.pdf"
Content-Transfer-Encoding: base64
iVBORw [... the whole encoded attachment here ...] RK5CYII=
==mixed
Content-Type: image/jpg; name="capuccino.jpg"
Content-Disposition: attachment; filename="capuccino.jpg"
Content-Transfer-Encoding: base64
G+aHAAAA [... another attachment encoded here ...] ORK5CYII=
==mixed==
好在大部分主流语言都内置了解析邮件的库,如 Python 的 email 模块,或者 Ruby 的 RubyMail。
3. 将数据写入数据库
这一步可以把你的编码技能施展开来,将 HTTP 请求转化为数据库记录。
你可以根据熟悉的开发语言及框架来处理,比如:
一般而言,如果你不要求特殊数据格式,这部分开发可以比较简单。但需要根据业务系统的数据接口进行格式转化。常见的数据交换格式有 CSV 或 JSON。某些业务软件可能会要求特殊或二进制传输协议。
如果只是为了“存档”邮件内容,直接决定如何索引和存储即可。
而选择如 MongoDB 这类非关系型数据库时要多加留意,尤其是不做复杂查询或统计的情况下可行,但建议看看这篇博客再做决定。
关系型数据库(如 SQL)则久经考验,至少应设计两张表:一张存邮件正文,另一张存附件数据。
对于绝大多数场景,只要邮件量不爆炸,以下数据库平台都能胜任:
- MySQL 及其强烈推荐的分支 MariaDB,应用广泛。被 Oracle 收购后,相关生态变化较大。
- Postgresql 功能强大且支持性好,但维护和配置略复杂。
- 商用级别还包括 Oracle 和 Microsoft SQL server。
如果只需将邮件存入数据库,这一步完成后系统已初步具备自动化能力。
但你可以继续挖掘数据价值!邮件内容通常包含大量对业务有用的信息,比如发票、客户资料、报价等。
这时,你就进入了下面的关键环节:邮件内容解析,实现数据驱动的业务自动化。
4. 从邮件正文提取信息
这一步才是真正的“解析”。目标是:

下面几种常见方法各有优劣:
基于关键词和词频的简单文本分析
这种办法适用于无固定格式、纯人工撰写的电子邮件。你可以为不同类型邮件定义关键词组,在收到新邮件时统计关键词出现频率,从而粗略判断邮件分类。
如情感分析场景,通过关键词判断客户情绪,正面邮件发送至老板,负面直接分类处理。虽然简单,但受文本歧义影响极大,且依赖自然语言处理精度,最终难以保证稳定应用。
正则表达式匹配
对于格式固定的自动化邮件,这一方法非常有效。比如,解析美国航空公司的出票邮件以抓取乘客姓名,就可以写一条正则表达式实现。
但遇到字段变更、邮件结构发生调整、或信息量有变(如多位乘客信息)时,维护难度陡升。
大多数主流编程语言有完善的正则表达式支持——如 Python 的 re, Ruby 的 Regexp,JavaScript RegExp 对象。
但正则表达式往往可读性低、维护困难。许多 Parseur 用户曾向我们反馈,最初基于正则的解析方案面对复杂邮件时难以持续维持。
5. 托管解析?Parseur 帮你一站式搞定!
如果你希望直接提取所需数据,并导入 Excel 或数据库,而无需折腾开发和运维,这正是 Parseur 致力于解决的难题。我们为你提供简洁明了的“所见即所得”模板定义界面,自由配置需要提取的字段,之后自动化处理每一封来信,并将数据推送到 Excel。(无须编程,无须维护)
你无需自己从零开发电子邮件解析器。只需要首次设置好模板,之后收到同类型邮件都会被自动解析,结构化结果即刻送达表格或数据库。
6. 与业务系统集成
当你把解析出来的数据装进 Excel 表格,只需导入业务应用即可。
或者,可以利用 Zapier 或 Make 这类零代码自动化工具,实现业务流程无缝对接。通过它们可将邮箱、解析器与主流 SaaS 应用快速集成,无需编写任何后端代码,极大提升效率和灵活性。
Parseur 内置了 Google Sheets、Zapier、Integromat(现为 Make)、Microsoft Power Automate 等平台集成,兼容上千种主流 app。
祝你自动化之路一帆风顺!
最后更新于