用正则剥离多客户端HTML邮件引用内容:遗漏哪些标记及失效场景?
邮件正文链接提取方案及规则补全疑问
目标
- 从邮件正文中提取链接,需排除引用线程(对话历史邮件内容)和客户端回复附加签名内的链接
- 定位新内容与引用历史的分界点,仅扫描该点之前的
href链接 - 数据来源为通过MS Graph获取的Outlook邮件正文,需覆盖所有邮件客户端、营销/CRM服务附加的引用内容
为何不使用uniqueBody
- MS Graph提供的
uniqueBody属性不可靠,查询时会间歇性抛出ErrorItemPropertyRequestedFailed错误,相同邮件的body属性无此问题,且该错误与内容大小无关
内容类型偏好:HTML
- 通过HTML格式正文的
href标签提取链接更可靠;纯文本格式需大量特殊处理,难以保证提取所有真实链接的成功率
实现方案:正则表达式
- 使用C#编译的单个不区分大小写、最左匹配正则扫描正文,匹配位置作为截断点,仅扫描该点之前的链接
- 对比HtmlAgilityPack,正则提取速度更快
- 参考Talon项目(支持Python和.NET,.NET版本HTML提取功能不完善)的正则模式,整理现有匹配规则如下:
| 分组 | 正则模式 |
|---|---|
| append | <div\s+(?:[^>]*?\s+)?id\s*=\s*['"]?appendonsend |
| reply | <div\s+(?:[^>]*?\s+)?id\s*=\s*['"]?divRply |
| signature | <div\s+(?:[^>]*?\s+)?id\s*=\s*['"]?Signature |
| 旧版Outlook桌面端引用标记 | <(?:div\ |
| Gmail、HubSpot/CRM、Yahoo、Thunderbird引用 | <(?:div\、hs_reply\、moz-cite) |
| Apple Mail | <blockquote\s+[^>]*?type\s*=\s*['"]?cite |
疑问
现有规则是否遗漏了常见发送方(Outlook变体、Gmail、Apple Mail、Yahoo及其他营销/CRM平台)的标记?能否真正实现全面覆盖?欢迎提供建议或指导。
内容的提问来源于stack exchange,提问作者sriram
相关产品推荐
相关产品推荐

