我尝试用 regex 解析电子邮件。结果正如你想的那样。
Source: Dev.to
介绍
最近我需要自动处理收到的邮件。
想法听起来很简单:
邮件到达 → 提取一些字段 → 触发 webhook
比如:
- 订单确认
- 发票邮件
- 发货通知
- 支持信息
看似没有什么复杂的。至少我当时是这么想的。
尝试 #1 — 正则表达式
和大多数开发者一样,我先用了正则。
const price = email.match(/Total:\s\$(\d+)/)
第一封邮件时它工作得很完美。随后下一封邮件出现了:
Amount paid: $29
还有一封写成:
Total price: USD 29
随后又收到一封带有嵌套表格、内联样式的 HTML 邮件,格式看起来像 2004 年的 Outlook 模板。
此时我的正则慢慢演变成了这样:
/(Total|Amount|Price).*?(\$|USD)?\s?(\d+(\.\d+)?)/
这通常是你意识到这种方法已经注定要失败的时刻。
尝试 #2 — 解析 HTML
好吧,那就解析 HTML 吧。
const dom = new JSDOM(emailHtml)
这有时能工作。但邮件的 HTML 是一种特殊的混乱:
- 表格里套表格
- 到处都是内联样式
- 每个发件人的布局都不同
于是你不得不为每种邮件格式维护自定义解析器。
真正的问题
邮件并不是结构化数据。它们是为人类编写的,而不是机器。每个发件人都有不同的格式,试图强行使用僵硬的解析规则会非常脆弱。
显而易见的解决方案(事后看来)
与其强行制定严格的解析规则,不如让 AI 解释邮件 并提取你想要的字段?
示例邮件:
Subject: Order confirmation
Customer: John Smith
Product: T-shirt
Total: $39
结构化输出:
{
"customer": "John Smith",
"product": "T-shirt",
"total": 39
}
现在你的后端收到的是干净的结构化数据,而不是原始邮件文本。
所以我构建了一个小工具
主要是因为我一次又一次地遇到这个问题。它叫 ParseForce。
流程很简单:
Incoming email → AI parsing → structured JSON → webhook
你可以:
- 获得一个唯一的收件箱
- 将邮件发送到该收件箱
- 定义你想要的模式
在你的 webhook 中接收结构化的 JSON。就这么简单。
它适用的场景
到目前为止,我已经用它来:
- 解析订单确认邮件
- 提取发票数据
- 处理潜在客户邮件
- 触发自动化工作流
基本上任何邮件中包含你希望系统理解的数据的情况都适用。
如果你感兴趣
你可以在这里查看 👉 https://parseforce.io
我也很好奇其他人是怎么处理这个问题的。你是使用正则、模板,还是完全其他的方案?
标签: node, webdev, saas, automation, ai